1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<bits/stdc++.h> using namespace std;
int c[10] = {13, 1, 2, 3, 5, 4, 4, 2, 2, 2}; int monthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int ans;
bool isLuckyYear(int y){ return (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)); }
int getDay(int y, int m){ if(m == 2 && isLuckyYear(y)){ return 29; }else{ return monthDays[m]; } }
bool judge(int y, int m, int d){ char str[100]; sprintf(str,"%04d%02d%02d",y,m,d); int sum = 0; for(int i = 0 ; i < 8 ; i ++){ sum += c[(str[i] - '0')]; } return sum > 50; }
int main(void){ for(int y = 2000 ; y <= 2023 ; y ++){ for(int m = 1 ; m <= 12 ; m ++){ int D = getDay(y,m); for(int d = 1 ; d <= D ; d ++){ if(judge(y,m,d)) ans++; } } } for(int m = 1 ; m <= 4 ; m ++){ int D = getDay(2024, m); if(m == 4) D = 13; for(int d = 1 ; d <= D ; d ++){ if(judge(2024,m,d)) ans++; } } cout<<ans; return 0; }
|