#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 前缀和预处理

京公网安备 11010502036488号