http://lx.lanqiao.cn/problem.page?gpid=T265
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
#include <cstring>
using namespace std;
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int y){
if (y%4==0&&y%100!=0||y%400==0){
return true;
}
return false;
}
int getYD(int y){
int sum=0;
int i;
if (y<=2011){
for (int i=y;i<2011;i++){
if (leap(i)){
sum+=366;
}
else{
sum+=365;
}
}
}
if (y>2011){
for (int i=2011;i<y;i++){
if (leap(i)){
sum+=366;
}
else{
sum+=365;
}
}
}
return sum;
}
int getMD(int y,int m,int d){
int sum=0;
for (int i=1;i<m;i++){
sum+=M[i];
if (i==2&&leap(y)){
sum+=1;
}
}
sum+=d-1;
return sum;
}
int main(){
int y,m,d;
int sum;
cin >> y >> m >> d;
sum=getYD(y);
if (y<2011){
cout << getMD(y,m
sum-=getMD(y,m,d);
cout << (sum%7==6?7:6-(sum%7)) << endl;
}
else{
sum+=getMD(y,m,d);
cout << (6+(sum%7)>7? (6+(sum%7))%7 : 6+sum%7) << endl;//注意
}
}