zoukankan      html  css  js  c++  java
  • P5440 【XR-2】奇迹

    我们称一个日期为一个八位数,第 1~4 位构成年,第 5~6 位构成月,第 7~8 位构成日,不足位数用 0 补足。同时,要求日期所代表的这一天真实存在,且年的范围为 1~9999。

    出现奇迹的日期都存在相同的特点:由“日”组成的两位数,由“月+日”组成的四位数,由“年+月+日”组成的八位数均为质数。但并不是所有存在这样特点的日期都一定会出现奇迹。

    现在,你得到了一个可能会出现奇迹的日期,然而不幸的是这个日期却是残缺的,八位中可能有若干位无法确定。你需要知道这个日期有多少种可能,这样你才能做好充足的准备去迎接奇迹的到来。

    ——————————————————————————————————————————————————————————

    身败名裂

    被闰年搞去世了

    #include<bits/stdc++.h>
    using namespace std;
    int prime[99991232],cnt,n,num[10],id[10],sum,ce;
    int bol[99991232];
    int day[50]={103,503,1103,107,307,607,907,211,311,811,911,113,313,613,1013,1213,317,617,1117,1217,419,619,719,919,1019,223,523,823,1123,1223,829,929,1129,1229,131,331,1031,1231};
    int flg[100000];
    char ch[10];
    int ge()
    {
        int ans=0;
        for(int i=1;i<=8;i++)ans=ans*10+num[i];
        if(bol[ans])return 0;
        if(ans/10000==0)return 0;
        if(ans%10000==229)
        {
            if((((ans/10000)%4==0)&&((ans/10000)%100!=0))||((ans/10000)%400==0))
            return 1;    
            else return 0; 
        }
        if(!flg[ans%10000])return 0;
        return 1;
    }
    void dfs(int pos)
    {
        if(id[pos]==5)for(int i=0;i<=1;i++)
        {
            num[id[pos]]=i;
            if(ce==pos){if(ge())sum++;}
            else dfs(pos+1);
        }
        else
        for(int i=0;i<=9;i++)
        {
            num[id[pos]]=i;
            if(ce==pos){if(ge())sum++;}
            else dfs(pos+1);
        }
    }
    int main()
    {
        bol[1]=1;
        for(int i=2;i<=99991231;i++)
            {
                if(!bol[i])prime[++cnt]=i;
             for(int j=1;j<=cnt&&i*prime[j]<=99991231;j++)
             {
                bol[i*prime[j]]=1;
                if(i%prime[j]==0)break;
            }
            }
        for(int i=0;i<=49;i++)flg[day[i]]=1;
        flg[0]=0;
        cin>>n;
        while(n--)
        {
            memset(id,0,sizeof(id));
            ce=0;sum=0;
            cin>>ch;
            int len=strlen(ch);
            for(int j=1;j<=len;j++)
            {
                if(ch[j-1]=='-')
                {id[++ce]=j;if(j==5)flg=1;}
            else num[j]=ch[j-1]-'0';
            }
            if(ce)dfs(1);    
            else if(ge())sum++;
            cout<<sum<<endl;
        }
    }
  • 相关阅读:
    一次Access注入
    偏移注入
    DHCP协议
    ARP协议、ARP欺骗
    bWAPP_HTML Injection
    上网行为管理&云计算
    两个文件上传/包含
    SQL报错注入
    如何建立git 远程仓库
    PHP实现异步调用方法研究
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11110479.html
Copyright © 2011-2022 走看看