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;
}
}
}
}
}
}