HDU 6010 - Daylight Saving Time

时间:2023-03-09 19:39:40
HDU 6010 - Daylight Saving Time

先算周几,再模拟

#include <bits/stdc++.h>
using namespace std;
int GetWeekDay(int y,int m,int d)//0为周一,依此类推
{
if(m==1) m=13,y--;
if(m==2) m=14,y--;
int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
return week;
}
int t, yy, mm, dd, h, m, s, week;
void solve()
{
if (mm < 3) puts("PST");
else if (mm == 3)
{
if (week == 7 && dd > 7)
{
if (h == 2) puts("Neither");
else if (h > 2) puts("PDT");
else if (h < 2) puts("PST");
}
else if (dd-week > 7) puts("PDT");
else puts("PST");
}
else if (mm > 3 && mm < 11) puts("PDT");
else if (mm == 11)
{
if (week == 7 && dd <= 7)
{
if (h < 1) puts("PDT");
else if (h == 1) puts("Both");
else puts("PST");
}
else if (dd - week <= 0) puts("PDT");
else puts("PST");
}
else puts("PST");
}
int main()
{
scanf("%d", &t);
for (int tt = 1; tt <= t; tt++)
{
scanf("%d-%d-%d %d:%d:%d", &yy, &mm, &dd, &h, &m, &s);
week = GetWeekDay(yy, mm, dd);
week++;
printf("Case #%d: ", tt);
solve();
}
}