CF 628A --- Tennis Tournament --- 水题

  CF 628A

  题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量,

       p为整个赛程提供给每位运动员的毛巾数量,

       每次在剩余的n人数中,挑选2^k=m(m <=n)个人进行比赛,剩余的n-m个人直接晋级,

       直至只剩一人为止,问总共需要的水的数量和毛巾的数量

  解题思路:毛巾数很简单: n*p即可

       水的数量:1,2,4,8,16,32,64,128,256,512,提前打成一个表,

       根据当前剩余的人数n在表中二分查找最大的小于等于n的数,结果即为本次进行比赛的人数,记为a[pos]

       根据a[pos]计算相应的水的数量,并用n-a[pos]/2(淘汰人数)以进行下一轮的计算,直至n为1

/* CF 628A --- Tennis Tournament --- 水题 */
#include <cstdio>
#include <algorithm>
using namespace std;

int a[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 };

//在a的{x,y)中查找小于等于key的第一个位置
int BinarySearch(int x, int y, int key){
    while (x < y){
        int mid = x + (y - x) / 2;
        if (a[mid] <= key && a[mid + 1] > key){
            return mid;
        }
        else if (a[mid] > key){
            y = mid;
        }
        else{
            x = mid+1;
        }
    }
    return -1;
}

int main()
{
#ifdef _LOCAL
    freopen("D:input.txt", "r", stdin);
#endif
    int n, b, p;

    while (scanf("%d%d%d", &n, &b, &p) == 3){
        int sum = 0;
        int t = n;
        while (t != 1){
            //查找当前t个人需要多少人进行比赛
            int pos = BinarySearch(0, 9, t); //a[pos]即为比赛人数的 a[pos]/2为裁判数
            sum += (a[pos] * b + a[pos] / 2);
            t -= (a[pos] / 2);    //减去淘汰的a[pos]/2即为剩余人数
        }
        printf("%d %d\n", sum, n*p);
    }

    return 0;
}

       

时间: 2024-12-23 09:39:54

CF 628A --- Tennis Tournament --- 水题的相关文章

CF 628B New Skateboard --- 水题

CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整除: 利用这个性质,先特判第一位数字是否能被4整除,可以则++cnt, 之后从第二位数字开始,设当前位为i,先判断a[i]能否被4整除,可以则++cnt, 再判断a[i-1]*10+a[i]能否被4整除,可以则cnt = cnt + (i) 相关证明: 设一整数各个位置为a1,a2,a3,...,an,b

一道cf水题再加两道紫薯题的感悟

1. 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. 2. 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整除.或者把分子上的每个数进行素数因子分解,分母上的数也进行素数因子分解,若分子上的与分母上相同素数因子进行比较,分子上的素数因子指数大于分母位置上的,则证明可整除. 3. 遇到乘法的时候注意越界问题. 4. 遇到求某一个区间内,满足某一特征的数的个数,而这个特征与因子,约数有关,尝试用埃筛的方法

CF#FF(255)-div1-C【水题,枚举】

[吐槽]:本来没打算写这题的题解的,但惨不忍睹得WA了13次,想想还是记录一下吧.自己的“分类讨论能力”本来就很差. 刚开始第一眼扫过去以为是LIS,然后忽略了复杂度,果断TLE了,说起来也好惭愧,也说明有时候太懒得动脑了,总是习惯利用惯性思维,这不是一件好事. [题意]:给你大小为n的整型数组a[n],求这数组的一个子串,其中最多可以修改子串中的一个数字,使得到的子串是最长的严格递增的子串,输出该子串的长度 L. [思路]:O(n)复杂度,枚举断点情况.第0个和第n个位置默认为断点.(用ve[

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

URAL 1023 Buttons(巴什博弈水题)

1023. Buttons Time limit: 2.0 secondMemory limit: 64 MB Background As you surely already know, Yekaterinburg has gotten its right to hold The Summer Olympic Games of the 2032. It is planned that it will be allowed to Russia as a country-organizer to

水题/CodeForces 485B Valuable Resources

1 /* 2 PROBLEM:CF 485B 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 #include<cmath> 8 using namespace std; 9 const long long MAX=9999999999; 10 int main() 11 { 12 long long xmax,xmin,ymax,ymin; 13 xmax=-MAX,ymax=-MAX; 14 xmin=MAX,ymin=M

刷了500道水题是什么体验?

并没有什么卵用. 我马上大二了,大一两学期目测切了1000道水题了,毫无意义. 至今不理解kmp和后缀数组,只会模板.数论和博弈论是什么?能吃吗?只会打表.图论至今不会tarjan,话说dlx是什么?插头dp,这是什么?数据结构还好,经常做高中生的题,可持久化可持久化线段树也能花一下午时间写出来,然而并不会考. 平时做题只刷水题,遇到难题的时候,随手搜题解,看了看,哇,这居然能这么搞!然后抄一遍别人代码,交上去ac. cf一年几乎没缺过,花了大一上半年时间才滚上div1.然而至今紫号一堆,黄名一

Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题

除非特别忙,我接下来会尽可能翻译我做的每道CF题的题面! Codeforces 148D 一袋老鼠 Bag of mice | 概率DP 水题 题面 胡小兔和司公子都认为对方是垃圾. 为了决出谁才是垃圾,大哥拿来了一袋老鼠,其中有w只白老鼠和b只黑老鼠.胡小兔先抓,先抓到白老鼠的人赢. 每次学姐抓完老鼠之后,总会有另外一只老鼠从袋子里自己跑出来(这只老鼠不算任何人抓的),而胡小兔抓老鼠时则不会发生这样的事. 每次袋子里的每只老鼠被抓到的概率相等,当有一只老鼠跑出来的时候,每只老鼠跑出来的几率也相

CodeForces - 283E Cow Tennis Tournament

Discription Farmer John is hosting a tennis tournament with his n cows. Each cow has a skill level si, and no two cows having the same skill level. Every cow plays every other cow exactly once in the tournament, and each cow beats every cow with skil