題目傳送門
【題目大意】
乙個口袋裡裝了t種顏色的球,第i種顏色的球的數目為a[i],每次隨機抽乙個小球,然後再放d個這種顏色的小球進口袋。
給出n個要求,第x個抽出的球顏色為y,求滿足條件的概率。
【思路分析】
抽出乙個球顏色為i的概率設為f[i],球的總數為sum
在第k步時,$f[i]=\frac$
那麼在k+1步就有兩種情況:
1.第k步抽中了顏色為i的球,那麼此時概率為$\frac*\frac$
2.第k步沒有抽中,那麼此時概率為$(1-\frac)*\frac$
所以第k+1步時,$f[i]=(1-\frac)*\frac+\frac*\frac=\frac=\frac$
由此可得,在任意時刻抽到某一種顏色的小球的概率是不變的,始終為$\frac$
如果這道題沒有條件的話,到這裡就可以完美解決了,但是我們還要考慮題目的條件。
這裡有乙個結論:要求中某一步要取的顏色出現的順序對概率並沒有影響。
假設現在的兩個要求中的小球顏色分別為i,j
1.若i在前,概率$p1=\frac*\frac$
2.若j在前,概率$p2=\frac*\frac$
顯然,$p1=p2=\frac$,得證。
然後寫**的時候還要注意一點就是那個概率的數字可能會很大,所以要先分解質因數約分一下。
【**實現】
1 #include2**戳這裡#define go(i,a,b) for(register int i=a;i<=b;i++)
3#define back(i,a,b) for(register int i=a;i>=b;i--)
4#define ll long long
5using
namespace
std;
6int
fr()
13while(ch>='
0'&&ch<='9'
)14 w=(w<<1)+(w<<3)+ch-'
0',ch=getchar();
15return w*q;16}
17int prime[20002],num=0;18
intt,n,d;
19int a[1002],sum,ans1[20002],ans2[20002
];20
int a1[20002],a2[20002
];21
void prime()30}
31return;32
}33void yue(int *ans,int x)
39return;40
}41void add(int *ans,int x,int &len)
48void mul(int *ans,int *x,int &len)
53int
main()
60 yue(ans1,a[y]);yue(ans2,sum);sum+=d;a[y]+=d;61}
62 go(i,1
,num)
66 a1[1]=a2[1]=1;int len1=1,len2=1;67
mul(a1,ans1,len1);mul(a2,ans2,len2);
68 back(i,len1,1) printf("%d"
,a1[i]);
69 printf("/"
);70 back(i,len2,1) printf("%d"
,a2[i]);
71return0;
72 }
OpenJ Bailian 2755 神奇的口袋
description 有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a 1,a 2 a n。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這...
luoguP1195 口袋的天空
標籤 雲端 難度 普及 提高 時空限制 1s 128mb 小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵...
luogu P1195 口袋的天空
小杉坐在教室裡,透過口袋一樣的窗戶看口袋一樣的天空。有很多雲飄在那裡,看起來很漂亮,小杉想摘下那樣美的幾朵雲,做成棉花糖。給你雲朵的個數n,再給你m個關係,表示哪些雲朵可以連在一起。現在小杉要把所有雲朵連成k個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...