======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$为方块总数量)相等,而且一旦$xa+b$,那么肯定不满足(每个人至少要吃一个),首先不难发现第一种人很难没得吃,如果第一种人没得吃,那么肯定是已经什么也不剩了,相反,第二种人比较容易没得吃。首先我们可以得到两种食物中较少的一种,假设数量为$k$,无论接下来如何操作最小值一定是较小的那种的数量一定小于$k$,所以如果$k反正答案也挺玄学。 =====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)$