2022牛客寒假第一场 B站与各唱各的 (期望)

题目链接:点击这里

题目大意:
n n n 个人和一个长度为 m m m 的序列。每个人对序列的每个元素都可以选或不选,如果某个元素被 0 0 0 n n n 个人选中就算该元素被删除掉,在人们不互相沟通且做出最优选择的前提下,求该序列剩余元素个数的期望

题目分析:
我们可以发现,对于序列的不同位置,是相互独立的,因此期望就是单个元素的期望乘上 m m m
因为每个都是在不能互相交流的情况下做出最优选择,所以他们对于同一个元素的选取概率是相同的
不妨设第 i i i 个人选该元素的概率为 p p p ,因此该元素被删掉的期望(概率)为 p n + ( 1 − p ) n p^n+(1-p)^n pn+(1p)n (都选择该元素和都没选择两种情况加起来)。因为做的是最优选择,所以大家都希望删除的期望尽可能的小
f ( p ) = p n + ( 1 − p ) n f(p)=p^n+(1-p)^n f(p)=pn+(1p)n ,则 f ′ ( p ) = n p n − 1 − n ( 1 − p ) n − 1 f'(p)=np^{n-1}-n(1-p)^{n-1} f(p)=npn1n(1p)n1
f ′ ( p ) = 0 f'(p)=0 f(p)=0 p = 0.5 p=0.5 p=0.5 ,易知 f ′ ( p ) f'(p) f(p) ( 0 , 0.5 ) (0,0.5) (0,0.5) 小于 0 0 0 ,在 ( 0.5 , 1 ) (0.5,1) (0.5,1) 大于 0 0 0 ,所以 p = 0.5 p=0.5 p=0.5 时取得最小值
这时就相当于了每个数只有选与不选两种情况且概率均等,所以总体期望就是:
m × 2 n − 2 2 n m\times\frac{2^n-2}{2^n} m×2n2n2
减去了全选和全不选两种情况

具体细节见代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<unordered_map>
#define ll long long
#define inf 0x3f3f3f3f
#define Inf 0x3f3f3f3f3f3f3f3f
//#define int  ll
#define endl '\n'
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
int read()
{
	int res = 0,flag = 1;
	char ch = getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch == '-') flag = -1;
		ch = getchar();
	}
	while(ch>='0' && ch<='9')
	{
		res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';
		ch = getchar();
	}
	return res*flag;
}
const int maxn = 1e6+5;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
int n,m;
int qpow(int a,int b)
{
	int res = 1;
	while(b)
	{
		if(b&1) res = 1LL*res*a%mod;
		a = 1LL*a*a%mod;
		b >>= 1;
	}
	return res;
}
int main()
{
	int t = read();
	while(t--)
	{
		n = read(),m = read();
		printf("%d\n",1LL*m*(qpow(2,n)-2+mod)%mod*qpow(qpow(2,n),mod-2)%mod);
	}
	return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值