Gym

Gym - 102785H

思路:当k=1 2 3 6 的时候无解,输出0

		当k=4 的时候 b[0123] 分别是1210
		当k=5的时候 b[01234] 分别是b[21200]
		其他情况b[0]=k-4;b[1]=2,b[2]=1;b[k-4]=1,其他为0

同时要注意的是k很大,b[k-4]数组开不下,但是n很小,所以对于k-4大于n的情况判断一下直接输出,就不用数组储存了

#include<bits/stdc++.h>
using namespace std;
#define mo 9901
#define ll long long
#define inf 0x7f7f7f
#define N 200010
ll read()
{
	ll x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ll)(ch-'0');ch=getchar();}
	return x*f;
}
int k,n,a[N],b[N];
int main()
{
	k=read();
	n=read();
	for (int i=1;i<=n;i++) a[i]=read();
	if (k==1||k==2||k==3||k==6)
	{
		puts("0");
		return 0;
	}
	if (k==4)
		b[0]=1,b[1]=2,b[2]=1,b[3]=0;
	else if (k==5)
		b[0]=2,b[1]=1,b[2]=2;
	else
	{
		b[0]=k-4;
		b[1]=2,b[2]=1;
		if (k-1<=20000) b[k-4]=1;
	}
	cout<<n<<endl;
	for (int i=1;i<=n;i++)
	{
		if (a[i]>=10010)
		{
			if (a[i]==k-4) cout<<"1 ";
			else cout<<"0 ";
		}
		else cout<<b[a[i]]<<" ";
	}
	return 0;
}
原文地址:https://www.cnblogs.com/71-111/p/14176229.html