HDU 1079

来源:互联网 发布:张国荣热门知乎 编辑:程序博客网 时间:2024/05/22 00:23

写模拟什么的最累了,先写到这一个代码雏形贴这儿。

#include <algorithm>#include <bitset>#include <cassert>#include <climits>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <deque>#include <iomanip>#include <iostream>#include <map>#include <numeric>#include <queue>#include <set>#include <stack>#include <string>using namespace std;typedef long long ll;struct mydate{    int year;    int month;    int day;}date[40000];int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};int getabsdays (mydate x){    int i;    int year = x.year - 1900;    int days = year*365+year/4-year/100+year/400;    for (i=1;i<=x.month-1;i++)        days += month_day[i];    days += x.day-1;    return days;}int game[40000];void record (int i){    if (date[i+1].day>1){        date[i].day = date[i+1].day-1;        date[i].month = date[i+1].month;        date[i].year = date[i+1].year;    }    else {        int m = date[i+1].month;        if (m >1){            date[i].year = date[i+1].year;            date[i].month = m-1;            if (m!= 3){                date[i].day = month_day[m-1];            }            else {                int y = date[i].year;                if (y%4==0 && y%100!=0 || y%400==0){                    date[i].day = 29;                }                else date[i].day = 28;            }        }        else {            date[i].year = date[i+1].year-1;            date[i].month = 12;            date[i].day = 31;        }    }}int check (int i){    int m= date[i+1].month;    int d = date[i].day;    int y = date[i].year;    mydate dd;    if (m!=2){        if (month_day[m]>=d) {            dd.year  =y;            dd.month = m;            dd.day = d;            return getabsdays (dd);        }        else return 0;    }    else {        int y = date[i].year;        if (y %4==0 && y%100!=0 || y%400==0){            if (29>=d) {                dd.year  =y;                dd.month = m;                dd.day = d;                return getabsdays (dd);            }            else return 0;        }        else {            if (28 >=d)            {                dd.year  =y;                dd.month = m;                dd.day = d;                return getabsdays (dd);            }            else return 0;        }    }}void init (){    int i;    mydate x,x0;    x.year = 2001;    x.month = 11;    x.day = 4;    x0.year =1900;    x0.month = 1;    x0.day = 1;    int final = getabsdays (x);    int  begin = getabsdays(x0);    date[final].year= 2001;    date[final].month = 11;    date[final].day = 4;    date[begin].year = 1900;    date[begin].month = 1;    date[begin].day = 1;    game[final] = 0;    for (i=final-1;i>=begin;i--){        record (i);        if (check(i)){            int t = check(i);            if (!game[t]) game[i]=1;            else {                if (!game[t]) game[i]=1;                else game[i] =0;            }        }        else {            if (!game[i+1]) game[i]= 1;            else game[i]=0;        }    }}int main(){    int t;    scanf ("%d",&t);    init ();    while (t--){        mydate x;        scanf ("%d %d %d",&x.year,&x.month,&x.day);    }    return 0;}     怂了怂了,可以巧做我还是不要练习写模拟了(咸鱼) 

include