Gym - 102785H A self-describing sequence
思路:当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;
}