您的位置:首页 > 其它

ural 1716

2014-03-20 23:08 232 查看
代码一:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int N=5005;

double dp

;

int main()
{
int n,s;
cin>>n>>s;
int y=s-n-n,x=n-y;
//    printf("%.7lf\n",1.0*(2*y+1)*x/(x+y));
for(int i=0;i<=x;++i)
{
for(int j=0;j<=y;++j)
{
if(i==0) dp[i][j]=0;
else if(j==0) dp[i][j]=1;
else dp[i][j]=(dp[i][j-1]*j+dp[i-1][j]*i+2.0*i*j/(i+j-1))/(i+j);
}
}
printf("%.7lf\n",dp[x][y]);
return 0;


代码二:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <queue>
#include <vector>
#include <map>
#define pb push_back
#define mp make_pair
#define eps 1e-9
#define zero(x) (fabs(x)<eps)
#define pi acos(-1.0)
#define f1 first
#define f2 second
const int inf=0x3f3f3f3f;
const long long INF=1LL<<50;
using namespace std;
typedef long long LL;
typedef pair <int,double> PII;
#define N 5002
double f[2]
[2];
int n,s,no,ye;

//f
[yes][last]
void doit()
{   ye=s-n*2;
no=n-ye;
//printf("~~%d %d\n",no,ye);
memset(f,0,sizeof(f));

f[0][0][1]=1;
double ans=0;
for (int i=0;i<n;i++)
{int o=i&1;
memset(f[o^1],0,sizeof(f[o^1]));
for (int j=0;j<=ye;j++)
{   double p1,p0;
p1=(ye-j)/double (n-i);
p0=1-p1;
f[o^1][j+1][1]+=f[o][j][1]*p1;

f[o^1][j][0]+=f[o][j][1]*p0; ans+=f[o][j][1]*p0;

f[o^1][j+1][1]+=f[o][j][0]*p1; ans+=f[o][j][0]*p1;

f[o^1][j][0]+=f[o][j][0]*p0;

}

}
printf("%.7lf\n",ans);
}
int main()
{
while (scanf("%d%d",&n,&s)!=EOF) doit();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: