目录

codeforces round 654

A Magical Sticks

题意:给1-n这n个数,一个操作可以将两个数合并成一个,问合并操作做完后最多能得到多少个相同的数?

题解:一开始太急了,没好好考虑直接就挂了,后来静下心考虑发现挺简单,考虑是$n$是奇数的情况,前$n-1$个数首位组合得到的和都是$n$,这样最终的答案就是$\frac{n-1}{2}+1$,n是偶数,直接首尾组合,最后的答案是$\frac{n}{2}$

B Magical Calendar

题意:难以描述,放链接:https://codeforces.com/contest/1371/problem/B

题解:看着吓人,实则吓人,比较容易发现一个问题,介于能放和不能放的临界条件是$k$和$x$(假设$k$是矩形长,$x$为方块总数量)相等,而且一旦$x<k$,无论怎么第一行的方块如何排布都会成立,所以显然矩形长为$x$是会对答案做出$x$的贡献。然后就好做了,如果$r$的值大于$x$,则矩形只能取比n小的所有数,答案为$\frac{n(n-1)}{2}+1$,否则,可以取1到$r$的所有数,答案为$\frac{(r+1)r}{2}$

题意:有两种食品,分别由$a$个和$b$个,有两种人分别为$n$个和$m$个,第一种人每次会挑出剩余量多的那种零食吃,第二种人每次会挑剩余量少的那种零食吃,问是否能让所有人都吃到东西?

题解:首先如果$n+m>a+b$,那么肯定不满足(每个人至少要吃一个),首先不难发现第一种人很难没得吃,如果第一种人没得吃,那么肯定是已经什么也不剩了,相反,第二种人比较容易没得吃。首先我们可以得到两种食物中较少的一种,假设数量为$k$,无论接下来如何操作最小值一定是较小的那种的数量一定小于$k$,所以如果$k<m$,那么也不成立,$k≥m$时容易证明一定存在一种方法,使最小值减少幅度为每次减$1$,这样一定能满足条件。

D Grid-00100

题意:这题可坑死我了……说不清楚就放链接https://codeforces.com/contest/1371/problem/D

题解:之前做过一个类似的题目,由那道题的结论可以直接得出,加入1可以平均分布在各行,那么一定可以找到一种分法把保证各行各列的1的数量都相同,这样函数的答案为0,如果做不到平均分,可以使每行每列大小差为1,即答案为2,可以按照之前填充的方法,在前k%n每行填充k/n+1个,其余都填充k/n个,这样答案是对的,挺玄学的,反正答案也挺玄学

E1 Asterism (Easy Version)

题意:定义一次比赛,主人公开始拥有x个物品,出了主人公外还有n个人,第i个人拥有$a_i$个物品,主人公要按照一定顺序来和n个人进行对决,如果一次对决中主人公拥有的物品多于那个人拥有的物品,那么主人公获胜并取得一个物品,进入下一次对决。令所有能够满足使主人公全胜的对决组合有k个,则$f(x)=k$,问对于x的不同的取值,$f(x)$的值不能被$p$整除的有多少?

题解:真的很绕的一道题啊,本质是暴力枚举,至少对与这个数据较小的题是这样的。枚举每一个可能的$x$(一开是要稍微根据题意划分一下$x$的范围,首先,求出$a$中最大值$y$,如果$x$比$a$中的最大值大,那么可以随便排列,数量为$n!$,$n≥p$,所以$n!$被$p$整除,所以,最大值小于y,其次,每次最多只能$+1$,为了胜过所有人,初始值至少应该是$y-n+1$,这样就确定好了范围),然后再枚举每一局开始有多少小于目前主人公手上的物品的人,用乘法原理累乘即可。题目标明了$p$质数,那么如果$p$可以整除$f(x)$那么$p$一定是乘法原理计算时一项的因子,所以单次枚举时,只要可以打败的人的数量被$p$整除则一定不满足条件。

E2 Asterism (Hard Version)

题意:同上,数据范围扩展到$10^5$

题解:其实上一问做完后不难发现,答案有单调连序性,如果$x$不满足条件,则比$x$大的一定都不满足,这是显然的,因为对于$x+1$得情况完全可以使用$x$的情况应对,而因子中也会出现$p$的倍数,所以上界可以二分答案得到,而对于上界,如果$x$不满足条件即不能使主人公全胜,则$x-1$也不能,这也比较显然,$x$一定是越大越好啊,所以下界也可以二分得到,最终得到区间,便得到答案。复杂度$O(nlogn)$