题意:n根木棍,每根木棍都有一个权值,木棍有可识别的木棍和不可识别的木棍,每次抽取木棍时,会累加权值,如果是可识别的木棍就不放回,不可识别的木棍就放回,问每根木棍至少被抽取一次的概率是多少。
思路:论文题?
1类棍子只会拿起一次,ans+=权值
2类棍子会拿起多次,ans+=权值*h[n] h[n]为欧拉函数第n项
一个带了点证明的博客
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) #define dep(i,b,a) for(int i=b;i>=a;i--) #define clr(a,b) memset(a,b,sizeof(a)) #define pb push_back #define pii pair<int,int > using namespace std; typedef long long ll; ll rd() { ll x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f; } const int maxn=5000+10; double f[maxn]; int main(){ int T,cat=1; for(int i=1;i<=5000;i++){ f[i]=f[i-1]+1.0/i; } cin>>T; while(T--){ int n; double ans=0; cin>>n; rep(i,1,n){ int w,ty; cin>>w>>ty; if(ty==1){ ans+=w; }else{ ans+=w*f[n]; } } printf("Case %d: %.7f\n",cat++,ans); } }