1 条题解

  • 2
    @ 2017-10-30 21:01:18

    400年一个周期(365*400+97)%7==0
    所以先处理到400年
    然后mod掉
    最后是随便改了个错的,比较傻长,可以压很多行XO;
    代码自己慢慢看,没时间细讲hahaha

    #include<bits/stdc++.h>
    using namespace std;
    int a,b,c,d,cnt=0,mouth,day,countt=1;
    int m[13]={31,29,31,30,31,30,31,31,30,31,30,31};
    long long t,ans;
    int main()
    {
        cin>>a>>b>>c>>t;
        b--;
        mouth=b;cnt=c;day=1;
        if(t<146097)
        while(t--)
        {
            cnt++;
            day++;
            if(mouth==1&&cnt==29)
                if((a%4)||(!(a%100)&&(a%400)))cnt=1,mouth++;    
            if(cnt==m[mouth]+1)cnt=1,mouth++;
            if(mouth==12){mouth=0;a++;}
            if(day==8)day=1;
            if(mouth==b)if(cnt==c)if(day==1)ans++;                              
        }
        else
        {
            long long p=0;
            while(countt<=146097)
            {
                countt++;
                cnt++;
                day++;
                if(mouth==1&&cnt==29)
                    if((a%4)||(!(a%100)&&(a%400)))cnt=1,mouth++;    
                if(cnt==m[mouth]+1)cnt=1,mouth++;
                if(mouth==12){mouth=0;a++;}
                if(day==8)day=1;
                if(mouth==b)if(cnt==c)if(day==1)p++;                                
            }
            ans=p*(t/146097);t%=146097;
            while(t--)
            {
                cnt++;
                day++;
                if(mouth==1&&cnt==29)
                    if((a%4)||(!(a%100)&&(a%400)))cnt=1,mouth++;    
                if(cnt==m[mouth]+1)cnt=1,mouth++;
                if(mouth==12){mouth=0;a++;}
                if(day==8)day=1;
                if(mouth==b)if(cnt==c)if(day==1)ans++;                              
            }
        }
        cout<<ans<<endl;
        return 0;
    }
    
  • 1

信息

难度
9
分类
(无)
标签
(无)
递交数
2
已通过
1
通过率
50%
上传者