ZOJ 3939The Lucky Week<模拟/暴力>

来源:互联网 发布:防止sql注入攻击 编辑:程序博客网 时间:2024/04/28 07:32

题意:我们认为日期的天数为1,11,21,并且是周一的为Lucky Week;现在给出第一个lucky week的日期,求第N个的lucky week;

//1:四百年一轮回,从闰年和平年的判定可以推出。//2:由上一条可以用程序判断出每四百年有2058个天为1,11,21的星期一,直接用。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int m1[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int m2[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};bool run(int year){    if(year%400==0||(year%4==0&&year%100!=0))        return true;    else        return false;    }int main (){    int y,m,d,n;    int T;scanf("%d",&T);    while(T--)    {        scanf("%d%d%d%d",&y,&m,&d,&n);        y+=(n/2058)*400;        n%=2058;        while(n){            if(d==11||d==21||d==1)                n--;            if(n==0)                break;            if(run(y))            {                d+=7;                if(d>m2[m])                {                    d-=m2[m];                    m++;                }                if(m>12){                    y++;                    m=1;                }            }            else {                d+=7;                if(d>m1[m])                {                    d-=m1[m];                    m++;                }                if(m>12){                    y++;                    m=1;                }            }        }        printf("%d %d %d\n",y,m,d);    }    return 0;}


0 0