模拟,枚举年份,判断月和日是否合法即可
#include<bits/stdc++.h>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int yy,mm,dd;
int isleap(int y){
return (y%400==0)||(y%4==0&&y%100!=0);
}
string get(int y){
string s = to_string(y);
string t = s;
reverse(s.begin(),s.end());
return t+s;
}
bool check(int y){
string str = to_string(y);
reverse(str.begin(),str.end());
int month = stoi(str.substr(0,2));
int day = stoi(str.substr(2));
if(y == yy && month == mm && day == dd) return false;
if(month == 0 || month > 12) return false;
if(isleap(y) && month == 2){
if(day ==0 || day > m[month]+1) return false;
}
else if(day==0 || day > m[month]) return false;
return true;
}
bool judge(int y){
if(!check(y)) return false;
string t = get(y);
char a = t[0];
char b = t[1];
if(a == b) return false;
if(t[2]!=a || t[5]!=a || t[7]!=a) return false;
if(t[3]!=b || t[4]!=b || t[6]!=b) return false;
return true;
}
int main(){
string ans,res;
string s;
cin>>s;
yy = stoi(s.substr(0,4));
mm = stoi(s.substr(4,2));
dd = stoi(s.substr(6));
for(int i=yy;i;i++){
if(check(i)){
ans = get(i);
break;
}
}
for(int i=yy;i;i++){
if(judge(i)){
res = get(i);
break;
}
}
cout<<ans<<endl;
cout<<res<<endl;
return 0;
}
我是傻逼