EOJ Monthly 2020.1——A. 回文时间

A. 回文时间

单点时限: 1.0 sec

内存限制: 512 MB

Cuber QQ 很惊奇地发现 2020 年 1 月 22 日的 10:02:02 构成的字符串竟然是一个回文串。(构成的字符串是 20200122100202 ),这下又有充足的理由约女神吃饭了。

可是这之后,女神开始为难 Cuber QQ 了。她现在只允许 Cuber QQ 在回文时间约她吃饭。

回文时间指的是,年份(四位数字构成)+月份(两位数字构成)+日期(两位数字构成)+小时(两位数字构成)+分钟(两位数字构成)+秒(两位数字构成)所形成的字符串是一个回文字符串。其中时间的表示形式是 24 小时制,例如下午 01:02 表示为 13:02 。

于是 Cuber QQ 开始期待之后的约会了。他现在想知道 2020 年 1 月 22 日的 10:02:02 之后第 k 个回文时间是多少(特别地,之后第 0 个回文时间就是 20200122100202 )。

保证他们约会的时间不可能晚于 9999 年 12 月 31 日的 23:59:59 。
输入格式

输入数据包含一行一个整数 k ,表示要求的是之后的第 k 个回文时间。

保证对于给定的输入,输出的答案不会大于 99991231235959 ,即晚于 9999 年 12 月 31 日的 23:59:59 。
输出格式

输出一行一个字符串表示答案。
样例
Input

扫描二维码关注公众号,回复: 8676802 查看本文章

0

Output

20200122100202

Input

2

Output

20200222200202

这道题只需要考虑年月日的改变就可以了,找出各个的可能取值,直接暴力便利就可以了。

#include<bits/stdc++.h>
using namespace std;
int main()
{

 	ios::sync_with_stdio(false);
 	cin.tie(0);cout.tie(0);
 	int k0;
 	cin>>k0;
 	
 	string a[100]={"11","22"};//日
	string b[100]={"01","02","10","11","12"};//月
	string c[100]={//年的后两位
	"00","01","02","03","04","05",
	"10","11","12","13","14","15",
	"20","21","22","23","24","25",
	"30","31","32","33","34","35",
	"40","41","42","43","44","45",
	"50","51","52","53","54","55",
	"60","61","62","63","64","65",
	"70","71","72","73","74","75",
	"80","81","82","83","84","85",
	"90","91","92","93","94","95"
	};
	string d[100]={//年的前两位可能取值
	"20","21","22","23","24","25",
	"30","31","32","33","34","35",
	"40","41","42","43","44","45",
	"50","51","52","53","54","55",
	"60","61","62","63","64","65",
	"70","71","72","73","74","75",
	"80","81","82","83","84","85",
	"90","91","92","93","94","95"
	};
	int ans=0;
	string str0="20200122100202";
	if(k0==0)
	{
		cout<<str0<<endl;
		return 0;
	}
	
	string s1="20200111100202";
	for(int i=0;i<48;i++)
	{
		for(int j=0;j<60;j++)
		{
			for(int k=0;k<5;k++)
			{
				for(int s=0;s<2;s++)
				{
					if(i==0&&j<12)//去除不可能出现的情况
					continue;
					
					string str2="";
					string str=d[i]+c[j]+b[k];
					str2+=str;
					str2+=a[s];
					reverse(str.begin(),str.end());					
					str2+=str;
					
					
					if(str2==str0||str2==s1)//去重
					continue;
					
					ans++;
					if(ans==k0)
					{
						
						
						cout<<str2<<endl;
						return 0;
						
					}
				}
			}
		} 
	}
 	
 	
}
发布了33 篇原创文章 · 获赞 16 · 访问量 2790

猜你喜欢

转载自blog.csdn.net/weixin_43310882/article/details/104027170