01串_NYOJ

#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,(51) 01111,11110(41) 11100,01110,00111,10011,11001(31)
                             11000,01100,00110,00011,10001,10010,01001(21)
                             10000,01000,00100,00010,00001(11) 
                             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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值