【2016NOIP普及组】T2 回文日期

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;
}
原创文章 157 获赞 148 访问量 8300

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/105879130