【BZOJ2698】染色 期望
【BZOJ2698】染色
Description
.jpg)
Input
输入一行四个整数,分别为N、M、S和T。
Output
输出一行为期望值,保留3位小数。
| 输入 | 输出 | 解释 |
| 5 1 2 3 | 2.429 | 染色一次共有7种等概率方案(题目描述中提到),其中染2个格子有4种,染3个格子有3种,期望值为2*4/7+3*3/7=2.429。 |
数据范围
1 ≤ S ≤ T ≤ N ≤ 1000000,0 ≤ M ≤ 1000000
题解:由于概率可加,所以我们只需要考虑每个位置被染色的概率即可。由于正着求不太容易,我们可以求每个位置不被染色的概率。具体做法:维护个前缀和乱搞即可。
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
typedef long double ld;
ll n,m,l,r,tot;
ld ans;
ll s[1000010];
ld pm(ld x,ll y)
{
ld z=1.0;
while(y)
{
if(y&1) z=z*x;
x=x*x,y>>=1;
}
return z;
}
int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&l,&r);
tot=(n-l+1+n-r+1)*(r-l+1)/2,ans=n;
ll i;
for(i=l;i<=n;i++) s[i]=s[i-1]+min(r-l+1,i-l+1);
for(i=1;i<=n;i++) ans-=pm((ld)(s[i-1]+s[n-i])/tot,m);
printf("%.3lf",(double)ans);
return 0;
}
| 欢迎来原网站坐坐! >原文链接<

浙公网安备 33010602011771号