0分求调
查看原帖
0分求调
1443372
angziqwq楼主2024/11/25 21:04

百余行模拟大败而归,样例能过,

#include <bits/stdc++.h>
using namespace std;
int n,ans,l[]={0,31,28,31,30,31,30,31,31,30,31,30,31},rl[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
char day[10];
bool run(int y)//闰年返回1,非闰年返回0
{
    if (y%100==0)
    {
        return y%400;
    }
    else
    {
        return y%4;
    }
}
bool zhishu(int x)//返回1为质数,0则不是
{
    if (x%2==0)
    {
        return 0;
    }
    for(int i=2;i<=sqrt(x);i++)
    {
        if (x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
void riqi(int x,int now)
{
    
    if (x==8)
    {
        
        if (zhishu(now)&&zhishu(now%1000)&&zhishu(now&&100))
        {
            //cout<<now<<endl;
            ans++;
            return;
        }
        return;
    }
    char t=day[x];
    if (x<4)
    {
        //cout<<now<<endl;
        if (t=='-')
        {
            for (int i=0;i<=9;i++)
            {
                int d=pow(10,7-x)*i;
                riqi(x+1,now+d);
            }
        }
        else 
        {

            int d=t-'0';
            //cout<<d<<"         "<<now<<endl;
            d=pow(10,7-x)*d;
            
            riqi(x+1,now+d);
        }
    }
    else if (x==4)
    {
        if (t=='-')
        {
            riqi(x+1,now);
            riqi(x+1,now+1000);
        }
        else
        {
            int d=t-'0';
            riqi(x+1,now+1000*d);
        }
    }
    else if (x==5)
    {
        int mon1=(now%10000)/1000;
        if(t=='-')
        {
            if (mon1==1)
            {
                for (int i=0;i<=2;i++)
                {
                    riqi(x+1,now+100*i);
                }
            }
            else
            {
                for (int i=0;i<=9;i++)
                {
                    riqi(x+1,now+100*i);
                }
            }
        }
        else
        {
            int d=t-'0';
            d*=100;
            riqi(x+1,now+d);
        }
    }
    else if (x==6)
    {
        int mon=(now%10000)/100;
        if (mon>=13)
            return ;
        if (t=='-')
        {
            if (mon==2)
            {
                for (int i=0;i<=2;i++)
                {
                    riqi(x+1,now+10*i);
                }
            }
            else
            {
                for (int i=0;i<=3;i++)
                {
                    riqi(x+1,now+10*i);
                }
            }
        }
        else
        {
            int d=t-'0';
            riqi(x+1,now+10*d);
        }
    }
    else if (x==7)
    {
        int y=now/10000;
        int r=run(y);
        int mon=(now%10000)/100;
        int d1=(now%100)/10;
        if (t=='-')
        {
            if (r)
            {
                for (int i=0;i<=9;i++)
                {
                    if (d1*10+i<=rl[mon])
                    {
                        riqi(x+1,now+i);
                    }
                }
            }
            else
            {
                for (int i=0;i<=9;i++)
                {
                    if (d1*10+i<=l[mon])
                    {
                        riqi(x+1,now+i);
                    }
                }
            }
        }
        else
        {
            int d=t-'0';
            if (d1*10+d>l[mon])
                return;
            riqi(x+1,now+d);
        }
    }
}
int main()
{
    cin>>n;
    
    for (int i=0;i<n;i++)
    {
        scanf("\n");
        for(int i=0;i<8;i++)
        {
            day[i]=getchar();
        }
        /*for (int i=0;i<8;i++)
        {
            cout<<day[i]<<endl;
        }*/
        riqi(0,0);
        cout<<ans<<endl;
        ans=0;
    }
    return 0;
}
/*1
53-7-3-7
*/

求调

2024/11/25 21:04
加载中...