时间:2016-04-08 13:01:50 星期五
题目编号:[2016-04-08][codeforces][628][A][Tennis Tournament]
题目大意:有n个人参加比赛,每次选择不大于n的最大的2^k的人数参加比赛,每场比赛需要给选手发b瓶水,给裁判发1瓶水,整个锦标赛,需要给所有参赛人每人发一条毛巾,问整个锦标赛需要多少瓶水和多少条毛巾
分析:n只有500,直接暴力枚举,2的指数幂,每次选择不大于当前参赛人数的,模拟整个过程,计算相应的数值
#include <cstdio>
using namespace std;
int main(){
int n,b,p;
scanf("%d%d%d",&n,&b,&p);
int left = 0,res = 0,tmp = n;
while(n > 1){
for(int i = 9 ; i >= 0 ; --i){
if((1 << i) & n){
left = n - (1 << i);
n = (1 << (i-1));
res += n * (b*2 + 1);
break;
}
}
n += left;
}
printf("%d %d\n",res,tmp * p);
return 0;
}