题意 : 有n个人,每个人可以玩m轮,每一轮中每个参与者都有cj张票,第 i 轮的奖金是2的i次方,问你每个人所能赢得最多的奖金的概率是多少。
思路 : 这个题比较坑啊,其实不用去算前几轮的,因为题目中要能越多的奖金越好,所以肯定是最后一轮啊,所以把每个人手中最后一轮的票想加,然后占的那个比例就是要输出的。

#include <stdio.h> #include <string.h> #include <iostream> using namespace std ; int a[10100] ; int gcd(int c,int b) { return (b>0)?gcd(b,c%b):c; } ; int main() { int m,n ; while(~scanf("%d %d",&m,&n)) { if(m == 0 && n == 0) break ; int sum = 0 ; for(int i = 0 ; i < m ; i++) { for(int j = 0 ; j < n ; j++) scanf("%d",&a[i]) ; sum += a[i] ; } for(int i = 0 ; i < m ; i++) { if(a[i] == 0) printf("0 / 1 ") ; else { int s = gcd(sum,a[i]) ; printf("%d / %d ",a[i]/s,sum/s) ;} } } return 0 ; }