[2016-04-08][codeforces][628][A][Tennis Tournament]

  • 时间:2016-04-08 13:01:50 星期五

  • 题目编号:[2016-04-08][codeforces][628][A][Tennis Tournament]

  • 题目大意:有n个人参加比赛,每次选择不大于n的最大的2^k的人数参加比赛,每场比赛需要给选手发b瓶水,给裁判发1瓶水,整个锦标赛,需要给所有参赛人每人发一条毛巾,问整个锦标赛需要多少瓶水和多少条毛巾

  • 分析:n只有500,直接暴力枚举,2的指数幂,每次选择不大于当前参赛人数的,模拟整个过程,计算相应的数值

  1. #include <cstdio>
  2. using namespace std;
  3. int main(){
  4. int n,b,p;
  5. scanf("%d%d%d",&n,&b,&p);
  6. int left = 0,res = 0,tmp = n;
  7. while(n > 1){
  8. for(int i = 9 ; i >= 0 ; --i){
  9. if((1 << i) & n){
  10. left = n - (1 << i);
  11. n = (1 << (i-1));
  12. res += n * (b*2 + 1);
  13. break;
  14. }
  15. }
  16. n += left;
  17. }
  18. printf("%d %d\n",res,tmp * p);
  19. return 0;
  20. }


来自为知笔记(Wiz)


posted on 2016-04-08 13:21  红洋  阅读(131)  评论(0)    收藏  举报

导航