2020浙江省赛 A - AD 2020 打表+前缀和
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020浙江省赛 A - AD 2020 打表+前缀和相关的知识,希望对你有一定的参考价值。
原题
题意:给出两个日期,求这两个日期之间有202这个字符串的天的个数。
题解:打表+前缀和。
ps:稍微计算一下,打表的话会计算7e3 x 10 x 30=2e6次,刚好可以。
注意:要判断闰年。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fir(i,a,n) for(int i=a;i<=n;i++)
const int N=1e5+10;
int n;
/*
202x xx xx
x202 xx xx
xxx2 02 xx
xxxx x2 02
*/
int a[8050][15][40];// i-2000 j k
int day[13]=0,31,29,31,30,31,30,31,31,30,31,30,31;
int run(int i)
if((i%400==0||i%4==0)&&i%100!=0) return 1;
else return 0;
int ju(int x)
string a=to_string(x);
string f="202";
int temp=a.find(f,0);
if(temp==-1) return 0;
else return 1;
void solve()
int last=0;
for(int i=2000;i<=9999;i++)
for(int j=1;j<=12;j++)
for(int k=1;k<=day[j];k++)
if(j==2&&k==29&&!run(i)) continue;
int temp=i*10000+j*100+k;
if(ju(temp)) a[i-2000][j][k]=last+1;
else a[i-2000][j][k]=last;
last=a[i-2000][j][k];
int main()
int t;cin>>t;
solve();
while(t--)
int y,m,d,yy,mm,dd;
scanf("%d%d%d%d%d%d",&y,&m,&d,&yy,&mm,&dd);
int ans=a[yy-2000][mm][dd]-a[y-2000][m][d];
int temp=y*10000+m*100+d;
if(ju(temp)) ans++;
cout<<ans<<endl;
return 0;
以上是关于2020浙江省赛 A - AD 2020 打表+前缀和的主要内容,如果未能解决你的问题,请参考以下文章
ZJCPC2020 第17届 浙江省赛The 17th Zhejiang Provincial Collegiate Programming Contest(ABCIK 5题)
2019年浙江省赛 I Fibonacci in the Pocket