rt,有没有那位dalao帮我康康我到底哪错了。。。
//标程:
#include<bits/stdc++.h>
using namespace std;
double k,p;
int q;
double dp[1024][10010];
int main(){
cin>>k>>q;
dp[0][0]=1;
for(int i(1);i<=k;++i)
for(int j(1);j<=10005;++j)
dp[i][j]=dp[i][j-1]*(double)i/k+dp[i-1][j-1]*(k-(double)i+1)/k;
while(q--){
cin>>p;
int x(1);
while(dp[(int)k][x]<p/2000) x++;
cout<<x<<'\n';
}
return 0;
}
//我的代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000+20,MAXM=MAXN*20;
double dp[MAXN][MAXM];
int k,p,q;
int main() {
scanf("%d%d",&k,&q);
dp[0][0]=1.0;
for(int i(1); i<=k; ++i)
for(int j(1); j<=MAXM; ++j)
dp[i][j]=dp[i][j-1]*(double)i/(double)k+dp[i-1][j-1]*((double)k-(double)i+1)/(double)k;
while(q--) {
scanf("%d",&p);
int tmp(1);
double t((p*1.0)/2000);
while(dp[k][tmp]<t) ++tmp;
printf("%d\n",tmp);
// cout<<dp[p][k]<<'\n';
}
return 0;
}
我寻思着这不就是把double改int吗,其他的一些涉及到换算的我也处理了啊。。。就是不过。。。(WA on answer 7)