社区讨论
求助一个简单的问题
学术版参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo2o7iae
- 此快照首次捕获于
- 2023/10/23 17:03 2 年前
- 此快照最后确认于
- 2023/10/23 17:03 2 年前
流程如下:
x从0开始。如果当前是x,每次从[x+1,n]中随机选择一个并将x替换,直到n结束。
求期望的替换次数
为什么n=1500的时候算出来是7.8(,我觉得应该远大于7.8才对,还是说我的直觉是错误的。
代码如下:
CPP//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define N 200005
#define mod 998244353
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define ld long double
#define ls (rt<<1)
#define rs ((rt<<1)|1)
#define SZ(x) (int)(x.size())
#define debug cout<<endl<<"ff"<<endl
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define fi first
#define se second
#define INF 1e9
#define pq priority_queue
#define rep(x,a,b) for(int x=a;x<=b;x++)
int qpow(int a,int b){
int res=1;
for(;b;b>>=1){
if(b&1) res=res*a%mod;
a=a*a%mod;
}
return res;
}
/*int fac[N],ifac[N];
int C(int n,int m){
if(m>n||m<0||n<0) return 0;
return fac[n]*ifac[n-m]%mod*ifac[m]%mod;
}
void init(){
fac[0]=1;
for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%mod;
ifac[N-1]=qpow(fac[N-1],mod-2);
for(int i=N-2;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%mod;
}*/
/*struct node{
int nxt,to;
}e[N<<1];
int cnt=1,head[N];
inline void add(int x,int y){
e[++cnt].nxt=head[x];
head[x]=cnt;
e[cnt].to=y;
}*/
inline int lowbit(int x){return x&(-x);}
inline int read(){
int x=0,t=1;char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') t=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch-'0');
ch=getchar();
}
return x*t;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>=10) write(x/10);
putchar(x%10+'0');
}
int T,n;
double p[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
p[0]=1;n=1500;
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
p[i]=p[i]+p[j]*1.0/(n-j);
}
}
double ans=0;
for(int j=1;j<=n;j++) ans=ans+p[j];
cout<<ans<<endl;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...