Luogu P4204 神奇口袋 題解報告

2022-04-28 20:51:16 字數 1889 閱讀 9459

題目傳送門

【題目大意】

乙個口袋裡裝了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個棉花糖,乙個棉花糖最少要用掉一朵雲,小杉想知道他怎麼連,花費的代價最小。輸入格式 每組測試...