[NOIP2016 普及组] 回文日期
[NOIP2016 普及组] 回文日期
题目背景
NOIP2016 普及组 T2
题目描述
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
牛牛习惯用
牛牛认为,一个日期是回文的,当且仅当表示这个日期的
一个
例如:
- 对于 2016 年 11 月 19 日,用
位数字 表示,它不是回文的。 - 对于 2010 年 1 月 2 日,用
位数字 表示,它是回文的。 - 对于 2010 年 10 月 2 日,用
位数字 表示,它不是回文的。
每一年中都有
其中,
一个年份是闰年当且仅当它满足下列两种情况其中的一种:
- 这个年份是
的整数倍,但不是 的整数倍; - 这个年份是
的整数倍。
例如:
- 以下几个年份都是闰年:
。 - 以下几个年份是平年:
。
输入格式
两行,每行包括一个
第一行表示牛牛指定的起始日期。
第二行表示牛牛指定的终止日期。
保证
保证
输出格式
一个整数,表示在
样例 #1
样例输入 #1
20110101
20111231
样例输出 #1
1
样例 #2
样例输入 #2
20000101
20101231
样例输出 #2
2
样例 #3
样例输入 #3
20211202
20211202
样例输出 #3
1
样例 #4
样例输入 #4
40110123
98900301
样例输出 #5
214
提示
【样例说明】
对于样例 1,符合条件的日期是
对于样例 2,符合条件的日期是
【子任务】
对于
solve
code
#include <bits/stdc++.h>
// #define ONLINE_JUDGE
#define fi first
#define se second
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define SZ(v) ((int)v.size())
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
typedef long long ll;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef double db;
using namespace std;
int d[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int yr1, yr2, m1, m2, d1, d2;
int cnt;
bool check() {
if(yr1 == yr2 && m1 == m2 && d1 == d2) return true;
return false;
}
bool huiwen(int a, int b, int c) {
int x = a * 10000 + b * 100 + c;
int t = 0;
string s = to_string(x);
while(a) {
a /= 10;
t++;
}
for(int i = 0; i < 4-t; i++) s = "0" + s;
for(int i = 0, j = SZ(s)-1; i < j; i++, j--) {
if(s[i] != s[j]) return false;
}
return true;
}
void run(int y) {
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) d[2] = 29;
else d[2] = 28;
}
void f() {
++d1;
if(d1 > d[m1]) {
d1 = 1;
++m1;
if(m1 > 12) {
yr1++;
m1 = 1;
run(yr1);
}
}
}
void ff() {
++d2;
if(d2 > d[m2]) {
d2 = 1;
++m2;
if(m2 > 12) {
yr2++;
m2 = 1;
}
}
}
void solve() {
string a, b;
cin >> a >> b;
yr1 = (a[0]-'0') * 1000 + (a[1]-'0') * 100 + (a[2]-'0')*10+ (a[3]-'0');
yr2 = (b[0]-'0') * 1000 + (b[1]-'0') * 100 + (b[2]-'0')*10+ (b[3]-'0');
m1 = (a[4]-'0') * 10 + (a[5]-'0');
m2 = (b[4]-'0')*10+ (b[5]-'0');
d1 = (a[6]-'0')*10+ (a[7]-'0');
d2 = (b[6]-'0')*10+ (b[7]-'0');
run(yr1);
ff();
while(!check()){
if(huiwen(yr1, m1, d1)) {
cnt++;
}
f();
}
cout << cnt << "\n";
}
int main() {
FAST;
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现