#include <stdio.h>
#define maxn 10001
int s[maxn];
int main()
{
s[1]=2; 当n==1时(2个):0,1
s[2]=4; 当n==2时(4个):00,11,10,11
s[3]=7; 当n==3时(7个):000,111,110,011,010,001,100
s[4]=12; 当n==4时(12个):0000,1111,1000,0100,0010,0001,0111,1110,1001,1100,0110,0011
s[5]=21; 当n==5时(21个):00000,11111,(5个1) 01111,11110(4个1) 11100,01110,00111,10011,11001(3个1)
11000,01100,00110,00011,10001,10010,01001(2个1)
10000,01000,00100,00010,00001(1个1)
2+2+5+7+5=21==12+7+2,与上次比赛的F题- Children’s Queue规律类似
做这题时,一直用数学公式推理,算出n==5时,01串的个数为20,然后就一直卡了我1个多点
收获:卡着的时候,出去跑两圈再回来想题。。
for(int i=6;i<maxn;i++)
s[i]=(s[i-1]+s[i-2]+s[i-4])%9997; 9997,不用多说
int n;
while(scanf("%d",&n)&&n!=-1)
{
printf("%d\n",s[n]);
}
return 0;
}
01串_NYOJ
最新推荐文章于 2022-11-21 20:24:57 发布