洛谷 P2010 回文日期

P2010 回文日期

题目描述

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

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

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

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

例如:

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

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

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

每一年中都有12个月份:

其中,1、3、5、7、8、10、12月每个月有31天;4、6、9、11月每个月有30天;而对于2月,闰年时有29天,平年时有28天。

一个年份是闰年当且仅当它满足下列两种情况其中的一种:

1.这个年份是4的整数倍,但不是100的整数倍;

2.这个年份是400的整数倍。

例如:

•以下几个年份都是闰年:2000、2012、2016。

•以下几个年份是平年:1900、2011、2014。

输入输出格式

输入格式:

输入包括两行,每行包括一个8位数字。

第一行表示牛牛指定的起始日期。

第二行表示牛牛指定的终止日期。

保证date_i和都是真实存在的日期,且年份部分一定为4位数字,且首位数字不为0。

保证date1 —定不晚于date2。

输出格式:

输出一行,包含一个整数,表示在date1和date2之间,有多少个日期是回文的。

输入输出样例

输入样例#1: 复制

20110101
20111231

输出样例#1: 复制

1

输入样例#2: 复制

20000101
20101231

输出样例#2: 复制

2

说明

【样例说明】

对于样例1,符合条件的日期是20111102。

对于样例2,符合条件的日期是20011002和20100102。

【子任务】

对于60%的数据,满足date1 = date2。

思路:模拟。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int a,b,c;
int sum,ans;
int s[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=12;i++)
        for(int j=1;j<=s[i];j++){
            c=(j%10)*1000+(j/10)*100+(i%10)*10+(i/10);
            sum=c*10000+i*100+j;
            if(sum<n||sum>m)    continue;
            ans++;
        }
    printf("%d",ans);
    return 0;
}
时间: 2024-08-01 06:44:58

洛谷 P2010 回文日期的相关文章

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

P1217 [USACO1.5]回文质数 Prime Palindromes 题意:给定一个区间,输出其中的回文质数: 学习了洛谷大佬的回溯写法,感觉自己写回溯的能力不是很强: #include <cstdio> #include <iostream> #include <cmath> const int maxn = 100; using namespace std; int a[maxn],l,r; bool is_prime(int n) //判断素数 { int

P2010 回文日期

题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同. 牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的.现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的. 一个88位数字是回文的,当且仅当对于所有的i ( 1 \le i \le 8)

#P2010 回文日期 的题解

题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同. 牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的.现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的. 一个88位数字是回文的,当且仅当对于所有的i ( 1 \le i \le 8)

洛谷 P1015 回文数 Label:续命模拟QAQ

题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884. 写一个程序,给定一个N(2<=N<=10,N=1

洛谷 P1015 回文数

P1015 回文数 标签 字符串 模拟 NOIp普及组 1999 云端 难度 普及- 时空限制 1s / 128MB 题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一

【2016NOIP普及】回文日期(c++)

[回文日期] ====================================== 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期.显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同. 牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的.现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文

2016回文日期

题解: 继续模拟(当然要加点优化). 由于每年都只能有一天是回文的,所以我们只需要枚举每一年,并判断能与年份形成回文的日期并验证就行了. var n1,n2,ans,x,i:longint; s:ansistring; a:array[1..12]of longint=(31,28,31,30,31,30,31,31,30,31,30,31); begin readln(n1,n2); n1:=n1 div 10000; while true do begin str(n1,s); x:=0;

落谷P1872 回文串计数(回文树)

传送门 这道题显然可以用PAM做出来. PAM可以算出以字符串的第ii个字符为结尾的回文子串的个数.我们将其存到一个数组l[n],再求一个前缀和就可以把字符串的前i个字符的前缀有多少个回文子串求出来. 然后,我们将PAM清空,倒着做一遍,就可以求出以第i个字符为左端点的回文子串个数r[i].与它不相交的回文子串且在它前面的子串有l[i - 1]个,相乘再累加就是答案. 此题在落谷的评级是绿,那是因为此题数据范围只有2000,不用PAM也可以做.但此题可以当做PAM入门的练手题. #include

洛谷 U3348 A2-回文数

题目背景 方方方很喜欢回文数,于是就有了一道关于回文数的题目. 题目描述 求从小到大第n(1<=n<=10^18)个回文数. 注释:出题人认为回文数不包括0. 输入输出格式 输入格式: 一行一个正整数n. 输出格式: 第n个回文数. 输入输出样例 输入样例#1: 2333 输出样例#1: 1334331 输入样例#2: 12345678987654321 输出样例#2: 23456789876543222234567898765432 说明 对于50%的数据,n<=3000. 对于100