AcWing 2867. 回文日期
原题链接
简单
作者:
acwing_陌路
,
2021-02-20 10:47:25
,
所有人可见
,
阅读 274
本题只需要用y总的板子模拟一下就行了
需要注意的是:第二个日期是ABAB型的,要多一个特判
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int leap(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 1;
return 0;
}
bool check(int num)
{
int year = num / 10000;
int month = num % 10000 / 100;
int day = num % 100;
if(month < 1 || month > 12) return false;
if(day == 0 || month != 2 && day > days[month]) return false;
if(month == 2)
{
int x = leap(year);
if(day > days[2] + x) return false;
}
return true;
}
int main()
{
cin >> n;
for(int i = 1000;i < 10000;i++)
{
int temp = i;
int date = i;
while(temp)
{
date = date * 10 + temp % 10;
temp /= 10;
}
if(check(date) && date > n)
{
cout << date << endl;
break;
}
}
for(int i = 1000;i < 10000;i++)
{
int temp = i;
int date = i;
while(temp)
{
date = date * 10 + temp % 10;
temp /= 10;
}
int a = date / 1000000;
int b = date / 10000 % 100;
int c = date / 10000000;
int d = date / 1000000 % 10;
if(date > n && check(date) && a == b && c != d)
{
cout << date << endl;
break;
}
}
return 0;
}