原题链接: https://www.luogu.org/problem/P2010

题目简述:

牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后22位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。

一个8位数字是回文的,当且仅当对于所有的i(1≤i≤8)i ( 1 \le i \le 8)i(1≤i≤8)从左向右数的第i个 数字和第9−i9-i9−i个数字(即从右向左数的第i个数字)是相同的。

例如:

  • 对于2016年11月19日,用88位数字20161119表示,它不是回文的。

  • 对于2010年1月2日,用88位数字20100102表示,它是回文的。

  • 对于2010年10月2日,用88位数字20101002表示,它不是回文的。

算出两个日期之间所有的回文日期。

思路:

  • 回文日期要是真实存在的 (这还用我说吗??)
  • 最后一组是极限数据,大概像这样:
10010101
99991231

循环枚举肯定会超时

  • 所以需要通过枚举日期来”制造回文“,类似与这样:

1999年中的回文日期应该是: 19999991 虽然它是不存在的

2010年中的回文日期应该是: 20100102

代码:

#include <bits/stdc++.h>
using namespace std;
int a,b,c,d;
int e,f;
bool runnian(int year) {
if(year%100==0) {
if(year%400==0) {
return 1;
}
return 0;
}//千禧年特判
else {
if(year%4==0) {
return 1;
}
return 0;
}
}
bool judge(int n) {
if(n==1||n==3||n==5||n==7||n==8||n==10||n==12) {
return 1;
}
return 0;
}
bool in(int year,int month,int day) {
if(year>d||year<a) {
return 0;
}
//——————————————————
if(year==a&&month<b) {
return 0;
}
if(year==a&&day>c&&month==b) {
return 0;
}
if(month==0||day==0||year==0) {
return 0;
}
//————————————————————-
if(year==d&&month>e) {
return 0;
}
if(year==d&&day>f&&month==e) {
return 0;
}
if(month>=13) {
return 0;
}
if(day>=32) {
return 0;
}
if(month==2) {
if(day>28&&(!runnian(year))) {
return 0;
}
if(day>29&&(runnian(year))) {
return 0;
}
return 1;
} else {
if(day>31&&judge(month)) {
return 0;
}
if(day>30&&!judge(month)) {
return 0;
}
return 1;
}
}
int main() {
string n,m;
cin>>n>>m;
a = atoi(n.substr(0,4).c_str());
b = atoi(n.substr(4,2).c_str());
c = atoi(n.substr(6,2).c_str());
d = atoi(m.substr(0,4).c_str());
e = atoi(m.substr(4,2).c_str());
f = atoi(m.substr(6,2).c_str());
int year = a;
int month = b;
int day = c;
int ans = 0;
for(int i = year;i<=d;++i) {
int o,p,q;
o = year;
string a;
stringstream ss;
ss<<year;
ss>>a;
char b[101010];
int len = 0;
for(int i = a.length()-1;i>=0;--i) {
b[len] = a[i];
len++;
}
string c(b);
p = atoi(c.substr(0,2).c_str());
q = atoi(c.substr(2,2).c_str());
year++;
if(in(o,p,q)) {
ans++;
}
}
cout<<ans<<endl;
}

题解-洛谷P2010-回文日期的更多相关文章

  1. 洛谷 P2010 回文日期 题解

    P2010 回文日期 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日 ...

  2. 洛谷 P2010 回文日期

    Noip2016普及组T2 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期 ...

  3. P2010 回文日期

    P2010 回文日期 题解 回文日期,一共8位,只需要枚举4位就好了其实,然后判断它是否合法 代码 #include<bits/stdc++.h> using namespace std; ...

  4. 洛谷 P1217 回文质数

    洛谷 P1217 回文质数 链接 https://www.luogu.org/problem/P1217 题目 题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 ...

  5. P2010 回文日期 题解

    这题其实就是纯暴力,暴力,再暴力,毫无技巧可言(总之您怎么乱搞都不会超时QAQ) 首先,根据题意,我们明白每年自多产生一个回文日期,因为对于每年的三百多天,前四位是固定的. 所以,我们只需要进行一个从 ...

  6. 题解 洛谷 P2010 【回文日期】

    By:Soroak 洛谷博客 知识点:模拟+暴力枚举 思路:题目中有提到闰年然后很多人就认为,闰年是需要判断的其实,含有2月29号的回文串,前四位是一个闰年那么我们就可以直接进行暴力枚举 一些小细节: ...

  7. #P2010 回文日期 的题解

    题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有 ...

  8. 洛谷P1217回文质数-Prime Palindrome回溯

    P1217 [USACO1.5]回文质数 Prime Palindromes 题意:给定一个区间,输出其中的回文质数: 学习了洛谷大佬的回溯写法,感觉自己写回溯的能力不是很强: #include &l ...

  9. P2010回文日期

    这道题是2016年普及组的题,难度等级为普及-. 这道题仍然是个模拟题.有两种策略:1.枚举回文,看日期是否存在2.枚举日期,看是否是回文.显然,前者要快很多,并且准确.本蒟蒻第一次便使用了后者,bu ...

  10. 洛谷P1435 回文子串

    题目背景 IOI2000第一题 题目描述 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成回文词.此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数. 比如 “A ...

随机推荐

  1. [考试反思]0921csp-s模拟测试49:困顿

    太弱.还是太弱. 拉不开分差,离第一机房分数线估计还是300多分. 但是,还是要骂:XX出题人. 部分分非常少且没有意义,T1基本只有0/纯暴力20/100三个档, T2正解是n2但是n3一分不给,还 ...

  2. iOS开发高级分享 - iOS的可折叠表视图

    导言 我曾经开发过一个iphone应用程序,它显示了大量的输入,这些输入分为不同的类别,在`UITableView`...若要更改其中一个输入的值,用户按下表视图中的对应行,并在出现的单独屏幕中更改该 ...

  3. 掌握git命令的正确使用姿势

    前言 最近在团队内部发起了一个小的python项目(用tkinter实现一个小工具),但是发现大家对git的使用还不太熟悉,不知道怎么同步代码.解决冲突等等.因为我觉得对测试工程师来说,git应该是必 ...

  4. jq实现简单的二级联动下拉框

    1 效果图 2 html <!DOCTYPE html> <html lang="en"> <head>     <meta charse ...

  5. setAccessible()方法

    在java代码中,我们经常使用private来控制类中成员变量的访问权限,在类的外边我们一般使用get方法获取私有成员变量的值,但是如果类中没有get方法,但我们又想获取该类私有成员变量的值,该怎么办 ...

  6. 你知道如何优化Join语句吗?

    join语句的两种算法,分别是:NLJ和BNL 测试数据: create table t1(id int primary key, a int, b int, index(a)); create ta ...

  7. php imagick生成图片需要注意的问题

    php imagick生成图片需要注意的问题 坐标必须写死不要写自适应 这样才能达到效果图的最好效果 而且不会出现各种问题如果前端显示的生成图片不达标 可以再写一套代码 把后台生成的图片透明度设成0 ...

  8. 【algo&ds】2.线性表

    1.线性表 线性表(英语:Linear List)是由n(n≥0)个数据元素(结点)a[0],a[1],a[2]-,a[n-1]组成的有限序列. 其中: 数据元素的个数n定义为表的长度 = " ...

  9. 设计模式(Java语言)-单例模式

    单例模式,简而言之就是在整个应用程序里面有且仅有一个实例,在程序的任何时候,任何地方获取到的该对象都是同一个对象.单例模式解决了一个全局的类被频繁创建和销毁的,或者每次创建或销毁都需要消耗大量cpu资 ...

  10. [quartusⅡ] 使用quartusⅡ的过程中,遇到过的一些“软件上的问题”

    1.USB blaster的驱动在设备管理器上点“更新驱动软件”,更新不了,说什么哈希值不在指定目录下,如下图, 解决方法是,https://blog.csdn.net/rdgfdd/article/ ...