题意:给一个year , 求最接近的一年,使得这一年的日历表和该年一样
思路:用zeller公式判断每年的1月1号是否日期相同,若相同,只要接下来一年的时间相同(闰/非闰年的差别)就可以判断是否相同. 妙
#include<bits/stdc++.h>
#define PI acos(-1.0)
#define pb push_back
#define F first
#define S second
#define debug puts
#define setp cout << fixed << setprecision(3)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
typedef long long ll;
const int N=1e6+6;
const int MOD=1e9+7;
const ll INF=1e18+8;
int check(int year,int month,int day){
if(month==1||month==2){
month+=12;
year--;
}
int c=year/100;
int y=year%100;
int m=month;
int d=day;
int W=c/4-2*c+y+y/4+26*(m+1)/10+d-1;
if(W<0) return (W+(-W/7+1)*7)%7;
return W%7;
}
bool check1(int y){
if(y%400==0 || y%100!=0&&y%4==0) return true;
return false;
}
int main(void){
FAST_IO;
int y;
cin >> y;
int d=check(y,1,1);
if(check1(y)){
while(1){
y++;
if(check1(y)&&check(y,1,1)==d){
cout << y << endl;
return 0;
}
}
}
else{
while(1){
y++;
if(!check1(y)&&check(y,1,1)==d){
cout << y << endl;
return 0;
}
}
}
return 0;
}