P2010 回文日期
题目传送门
方法一:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
const int m[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int a,b,ans;
int hw(int i,int j,int x,int y) {return y*10000001+x*1000010+j*100100+i*11000;}
int main()
{
//fre();
cin>>a>>b;
for(int i=0;i<=1;i++)
{
for(int j=0;j<=9;j++)
{
int month=i*10+j;
if(!month||month>12) continue;
for(int x=0;x<=3;x++)
{
for(int y=1;y<=9;y++)
{
int day=x*10+y;
if(day>m[month]) break;
int sum=hw(i,j,x,y);
if(a<=sum&&sum<=b) ans++;
}
}
}
}
cout<<ans<<endl;
return 0;
}
方法二:
#include<cstdio>
#include<iostream>
using namespace std;
const int m[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int t,t1,sum;
int main()
{
cin>>t>>t1;
for(int i=1;i<=12;i++)
for(int j=1;j<=m[i];j++)
{
if(!(j%10)) continue;
int num=(j%10)*10000001+(j/10)*1000010+(i%10)*100100+(i/10)*11000;
if(num>=t&&num<=t1) sum++;
}
cout<<sum<<endl;
return 0;
}