Problem - E1 - Codeforces
这是这个问题的简单版本。不同版本之间的区别是对n和ai的约束。只有当所有版本的问题都解决了,你才能进行hack。首先,Aoi提出了以下关于竞争性编程问题的想法:柚子是一个收集糖果的女孩。原来,她有糖果。还有n个敌人,编号从1到n。敌人i有a,糖果。Yuzu将确定一个排列p。一个排列是由n个从1到n的不同整数以任意顺序组成的数组。例如,2,3,1,5,4)是一种排列,但1,2,2}不是一种排列(2在数组中出现两次),1,3,4也不是一种排列(因为n = 3,但数组中有数字4)。之后,她将与敌人进行n次决斗,规则如下:如果Yuzu的糖果数量与敌人P相等或更多,她赢得决斗并获得1个糖果。否则,她会输掉这场决斗,什么也得不到。柚子得到的糖果将用于接下来的决斗。柚子想赢得所有的决斗。P有多少个有效排列?这个问题很简单,对苍井的朋友赤丽来说并不有趣。Akari根据上述观点提出了以下问题:让我们定义f(æ)为整数的有效排列数。给定n, a和质数p≤n。如果f(æ)不能被p整除,我们称正整数z为好。找到所有好你的任务是解决阿卡丽制造的问题。输入第一行包含两个整数n, p(2≤p≤n≤2000)。可以保证数字p是质数(它恰好有两个因数1和p)。第二行包含n个整数a1, a2, ......., an(1≤a;≤2000)。输出在第一行中,输出好整数的数目x。在第二行中,按升序输出所有整数。保证好整数z的个数不超过105
Examples
input
Copy
3 2 3 4 5
output
Copy
1 3
input
Copy
4 3 2 3 5 6
output
Copy
2 3 4
input
Copy
4 3 9 1 1 1
output
Copy
0
请注意在第一个检验中,p= 2。如果a≤2,则Yuzu没有有效的排列。所以f(æ) =0对于所有≤2。数字0能被2整除,所以所有≤2的整数都是不好的。Ifx =3,{1,2,3}是柚子唯一有效的排列。f(3) = 1,所以3是合适的。如果x = 4,{1,2,3},{1,3,2},{2,1,3},{2,3,1}都是Yuzu的有效排列。所以f(4) = 4,所以4不是很好。如果x 2 5,所有6种排列对柚子都有效。所以f(æ) = 6对于所有的x >,所以所有的整数x 2 5都不是好的。所以,唯一合适的数字是3。在第三个检验中,对于所有正整数x,值f(æ)能被p = 3整除。
题解:
假如数组中目前有p个小于等于x的,那么我看可以选择的方案数位p*(p-1)*(p-2)...1,肯定是不行的,这就是本题的关键
由于ai只有2000,那么我们之间枚举x,假设cnt是目前已经决斗过,并且小于等于x的数目,x应该等于
x + cnt
我们可以二分找到第一个大于x + cnt的位置pos,小于等于x + cnt的位置就是pos - 1
目前我们可以随便选的数目就是((pos - 1) - cnt),若%p等于0,说明肯定不行(原因如上)
#include
#include
#include
#include
#include
#include
#include