E1. Asterism (Easy Version)(暴力 + 二分)

Problem - E1 - Codeforces

E1. Asterism (Easy Version)(暴力 + 二分)_第1张图片

这是这个问题的简单版本。不同版本之间的区别是对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
#include
#include
using namespace std;
typedef long long ll;
typedef pair PII;
#define int long long
int a[400050];
int n,p;
void solve()
{
	cin >> n >> p;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	sort(a + 1,a + 1 + n);
	vector ans;
	for(int i = 1;i <= 2000;i++)
	{
		int ff = 0;
		int cnt = 0;
		for(int j = 1;j <= n;j++)
		{
			int pos = upper_bound(a + 1,a + 1 + n,i + cnt) - a;
			pos --;
			if((pos - cnt)%p == 0)
			{
				ff = 1;
				break;
			}
			cnt++;
		}
		if(!ff)
		{
			ans.push_back(i);
		}
	} 
	cout << ans.size() <<"\n";
	for(auto i:ans)
	{
		cout <> t;
	while(t--)
	{
		solve(); 
	}
}

你可能感兴趣的:(算法)