P1518 - [蓝桥杯2020初赛] 回文日期 - New Online Judgehttp://oj.ecustacm.cn/problem.php?id=1518
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
set<int>s;
int isRun(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
int m[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int check(int year, int month, int day) {
if (month > 12) {
return 0;
}
if (month == 2) {
if (isRun(year)) {
m[2] = 29;
} else {
m[2] = 28;
}
}
return day <= m[month];
}
void init() {
for(int year = 1000; year < 10000; year++) {
int t = year;
int month = t % 10 * 10;
t /= 10;
month += t % 10;
t /= 10;
int day = t % 10 * 10;
t /= 10;
day += t;
if (check(year, month, day)) {
s.insert(year*10000+month*100+day);
}
}
}
int isABAB(int t) {
int a = t%10;
t/=10;
int b = t%10;
t/=10;
int c = t%10;
t/=10;
int d = t%10;
return a == c && b == d;
}
int main() {
init();
int T;
cin >> T;
while(T--) {
int n;
cin >> n;
set<int>::iterator it = s.upper_bound(n);
cout << *it << endl;
for(;it != s.end(); it++) {
if (isABAB(*it)) {
cout << *it << endl;
break;
}
}
}
return 0;
}