#include <bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(false), cin.tie(0); #define rep(i, n) for (int i = 0; i < (n); i++) typedef long long LL; typedef pair<int, int> PII; typedef vector<int> vi; //const int N=; int days[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int s[15]; int get(int y, int m, int d) { int c=0; switch(m) { case 12: c+=30; case 11: c+=31; case 10: c+=30; case 9: c+=31; case 8: c+=31; case 7: c+=30; case 6: c+=31; case 5: c+=30; case 4: c+=31; case 3: if(y%100 && y%4==0||y%400==0) c++; c+=28; case 2: c+=31; case 1:c+=d; } return c; } void prework() { for(int i=1; i<=12; i++) s[i]=s[i-1]+days[i]; } int main() { IOS prework(); int y, m, d; cin>>y>>m>>d; int ans=s[m-1]+d; if((y%100 && y%4==0||y%400==0) && m>2) ans++; cout<<ans; return 0; }
get函数即为答案,我们利用switch的一点小技巧,从case12一直到case1去累加这个时间
y%100 && y%4==0||y%400==0利用了&&的优先级比||高的技巧,是4的倍数但不是100的倍数,或者400的倍数是闰年
另一种方法就是题目代码中的prework 前缀和预处理