题解 P6449 【[COCI2008-2009#4] B】

sukimo

2020-04-21 22:00:49

Solution

这道题写起来比较简单,但是有一些边边角角的地方需要留心。我的思路是离线处理出从第$1$个月到第$i$个月的天数前缀和,然后对于第$i$个月第$j$天,算出从$1$月$1$日到这一天一共过去了多少天,中间进行取模化简,再计算包括$1$月$1$日的星期四,现在是星期几,最后细心一点结果就出来了。注意如果是星期天,$7\%7==0 $,但是实际上不是“第$0$天”而是第$7$天,特判一下。 上代码: ``` #include<bits/stdc++.h> using namespace std; int pre[13]={0,31,59,90,120,151,181,212,243,273,304,334,365}; void print(int x){ switch(x){ case 1:printf("Monday");break; case 2:printf("Tuesday");break; case 3:printf("Wednesday");break; case 4:printf("Thursday");break; case 5:printf("Friday");break; case 6:printf("Saturday");break; case 0:printf("Sunday");break; } } int main(){ int day,month;scanf("%d%d",&day,&month); print(((pre[month-1]+day-1)%7+4)%7); return 0; } ```