usaco Friday the Thirteenth

来源:互联网 发布:火狐javascript设置 编辑:程序博客网 时间:2024/06/09 01:08
找规律,1900的一月一日是星期last = 1,那么1月13日是星期((13  - 1)% 7  + last) = 6;last = 6;因为一月有31天,所以1月13离2月13是31天, 2月13日是星期 (31 % 7 + last) % 7 = 2;  last = 2;以此类推。
/**LANG: C++PROG: fridayID: grttman1**/#include <iostream>#include <fstream>#include <string>#include<cstring>using namespace std;const int maxn = 400 + 5;const int s = 1900;int day[8];int month[13] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int main(){    freopen("friday.in","r",stdin);    freopen("friday.out","w",stdout);    int n;    while(scanf("%d", &n) == 1)    {        memset(day, 0, sizeof(day));        int last = 6;        for(int i = 0; i < n; i++)        {            int year = s + i;            if(year % 4 == 0 && year % 100 != 0 || (year % 400 == 0))            {                month[1] = 29;            }            else month[1] = 28;            for(int j = 1; j < 12; j++)            {                last = (month[j - 1] % 7 + last) % 7;                day[last]++;            }            if(i != n - 1)            {                last = (month[11] % 7 + last) % 7;                day[last]++;            }        }        day[6]++;        printf("%d %d %d %d %d %d %d\n", day[6], day[0], day[1], day[2], day[3], day[4], day[5]);    }    return 0;}

原创粉丝点击