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

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;
						
					}
				}
			}
		} 
	}
 	
 	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章