2016 ICPC大連賽區 hdu5978 To begin or not to begin
To begin or not to begin Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 229 Accepted Submission(s): 175
Problem Description A box contains black balls and a single red ball. Alice and Bob draw balls from this box without replacement, alternating after each draws until the red ball is drawn. The game is won by the player who happens to draw the single red ball. Bob is a gentleman and offers Alice the choice of whether she wants to start or not. Alice has a hunch that she might be better off if she starts; after all, she might succeed in the first draw. On the other hand, if her first draw yields a black ball, then Bob’s chances to draw the red ball in his first draw are increased, because then one black ball is already removed from the box. How should Alice decide in order to maximize her probability of winning? Help Alice with decision.
Input Multiple test cases (number of test cases≤50), process till end of input. For each case, a positive integer k (1≤k≤10^5) is given on a single line.
Output For each case, output: 1, if the player who starts drawing has an advantage 2, if the player who starts drawing has a disadvantage 0, if Alice’s and Bob’s chances are equal, no matter who starts drawing on a single line.
Sample Input
1 2
Sample Output
0 1
Source 2016ACM/ICPC亞洲區大連站-重現賽(感謝大連海事大學) 題意:給k個黑球,1個紅球,誰先拿到紅球誰就贏,問先手贏的機率大還是後手贏的機率大或者一樣大。
思路:這是個簡單的概率問題,第n回合抽到紅球的機率一定等於1/(k+1),那麼贏的機率=擁有的回合數*(1/(k+1)),如果k為奇數,那麼兩邊回合一樣所以機率一樣大,如果k為偶數那麼必定先手的有多一個回合的機會,所以機率更大,下面給程式碼:
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> typedef long long LL; using namespace std; #define maxn 1005 #define ll l,mid,now<<1 #define rr mid+1,r,now<<1|1 #define lson l1,mid,l2,r2,now<<1 #define rson mid+1,r1,l2,r2,now<<1|1 int main(){ int k; while(~scanf("%d",&k)){ if(k&1) printf("0\n"); else printf("1\n"); } }