NC233106. 恶意竞争
描述
输入描述
输入包含一行两个整数 ()。
输出描述
输出一行一个实数表示答案。绝对误差或相对误差不超过时即为正确。
示例1
输入:
1 2
输出:
3.0000
C++(g++ 7.5.0) 解法, 执行用时: 27ms, 内存消耗: 7876K, 提交时间: 2022-11-01 16:39:00
#include<bits/stdc++.h> using namespace std; #define int long long int n,m; double f[1010][1010]; signed main() { cin>>n>>m; for(int i=n;i>=0;i--) for(int j=m;j>=0;j--){ if(i==n&&j==m) continue; f[i][j]=(1.0*f[i+1][j]*(n-i)*j/n/m+1+1.0*f[i][j+1]*(m-j)*i/n/m+ 1.0*f[i+1][j+1]*(n-i)*(m-j)/n/m)/(1-(1.0*i*j/n/m)); } printf("%lf",f[0][0]); }
C++(clang++ 11.0.1) 解法, 执行用时: 23ms, 内存消耗: 11644K, 提交时间: 2022-10-04 20:17:08
#include<bits/stdc++.h> using namespace std; double f[12345][12345]; int n,s; int main(){ cin>>n>>s; f[n][s]=0; for(int i=n;i>=0;i--)for(int j=s;j>=0;j--)if(i!=n||j!=s)f[i][j]=s*n*1.0/(s*n-i*j)*(i*j*1.0/s/n+(n-i)*j*1.0/s/n*(f[i+1][j]+1)+i*(s-j)*1.0/n/s*(f[i][j+1]+1)+(n-i)*(s-j)*1.0/s/n*(f[i+1][j+1]+1)); printf("%.4lf",f[0][0]); }