题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6112
题意:中文题
解析:其实思路应该都是有的,就是写起来麻烦一点,我的做法是先做一个每年天数的前缀和,然后从题目给的yy开始枚举,再加上当前年,剩下的天数,和枚举到那年那天的之前的天数,然后得到答案就跳出
#include <bits/stdc++.h>
using namespace std;
int month[] = {0,31,28,31,30,31,30,31,31,30,31,30};
int sum[10000];
bool judge(int y)
{
return (y%4==0&&y%100!=0)||(y%400==0);
}
int main(void)
{
int t;
scanf("%d",&t);
for(int i=2017;i<10000;i++)
{
if(judge(i))
sum[i] = sum[i-1]+366;
else
sum[i] = sum[i-1]+365;
}
while(t--)
{
int y,m,d;
scanf("%d-%d-%d",&y,&m,&d);
int cnt1 = 365;
if(m<2 || (m==2&&d<=28))
{
if(judge(y))
cnt1++;
}
int flag = 0;
if(m==2 && d==29)
flag = 1;
for(int i=y;i<10000;i++)
{
int tmp = sum[i]-sum[y];
if(flag && judge(i+1)!=flag)
continue;
if(judge(i+1)&&(m>2||(m==2&&d==29)))
tmp++;
if((cnt1+tmp)%7==0)
{
printf("%d\n",i+1);
break;
}
}
}
return 0;
}
/*
2
2020-2-28
2020-2-29
*/