rt,复制黏贴了标称对拍[emmm],但交上去还是直接wa
正在重构代码(这也能重构??)
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll double
#define int long long
using namespace std;
int n,m,c;
ll ans,C[105][105];
static inline ll ksm(ll x,int k){
ll tmp=1,X=x;
while(k){
if((k%2)==1)tmp=tmp*X;
X=X*X,k/=2;
}
return tmp;
}
signed main(){
C[0][0]=1.0;
for(int i=1;i<=103;i++){
C[i][0]=1.0;
for(int j=1;j<=i;j++)C[i][j]=C[i-1][j-1]+C[i-1][j];
}
while(cin>>c){
if(!c)break;
scanf("%lld%lld",&n,&m),ans=0.0;
if(m>c||m>n||(n-m)%2==1){
printf("0.000\n");
continue;
}
for(int i=0;i<=m;i++){
for(int j=0;j<=c-m;j++){
ans+=((i&1)==1?-1:1)*C[m][i]*C[c-m][j]*ksm((c-2*i-2*j)*1.0/c,n);
}
}
ans=ans*C[c][m];
ans/=ksm(2.0,c);
printf("%.3lf\n",ans);
}
}
这是重构前的代码,自测样例全过