[NOIP2016]回文日期
题目描述
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
牛牛习惯用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位数字。 第一行表示牛牛指定的起始日期。 第二行表示牛牛指定的终止日期。 保证datei和都是真实存在的日期,且年份部分一定为4位数字,且首位数字不为0。 保证date1 —定不晚于date2。
输出描述:
输出一行,包含一个整数,表示在date1和date2之间,有多少个日期是回文的。
示例1
输入
20110101 20111231
输出
1
说明
符合条件的日期是20111102。
示例2
输入
20000101 20101231
输出
2
说明
符合条件的日期是20011002和20100102。
备注:
对于60%的数据,满足date1 = date2。
遇到的问题:
刚开始想通过枚举给出的两个日期之间的正确日期来判断,但存在几个问题:
1.较难实现,需要判断的条件太多
2.复杂度过高,会t
解决思路:
后来,借鉴大佬的代码后发现,枚举的方向错了,原来的枚举存在大量不必要的计算,其实只需要通过真实存在的日期推出年份,再看得出的回文日期是否在范围内即可。
或者应该还可以用年份推日期,看日期是否正常(可能稍微复杂一些)
总之就是优化枚举的方向与具体步骤。
#include <bits/stdc++.h>using namespace std;int main()
{int d1,d2,date,year,month,day;cin>>d1>>d2;int cnt=0;int m[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//打表,忽略闰年问题for(int month=1;month<=12;month++){for(int day=1;day<=m[month];day++){year=(day%10)*1000+(day/10)*100+(month%10)*10+month/10;//日期对应的年份date=year*10000+month*100+day;//完整日期if(date>=d1&&date<=d2){cnt++;}}}cout<<cnt;
}
[NOIP2016]回文日期相关推荐
- 洛谷 题解 P2010 【回文日期】
因为有8个字符,所以可得出每一年只有一个回文日期. 因此只要判断每一年就行了. 做法: 我们先把年倒过来,例如2018年就倒为8102,就得出8102就是回文日期的后四个字符,我们只要判断一下有没有这 ...
- Python案例:输出指定要求的回文日期
文章目录 一.提出任务 二.完成任务 (一)编写程序,实现功能 (二)运行程序,查看结果 一.提出任务 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日.因为如果将 ...
- Python案例:输出公元后到目前为止全部回文日期
文章目录 一.回文日期 二.提出任务 三.完成任务 (一)涉及知识点 1.time模块 2.datetime模块 3.timedelta模块 (二)实现步骤 1.编写源代码 2.运行程序,查看结果 3 ...
- Vijos P2010 回文日期【回文+日期计算】
描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期.显然:一个日期只有一种表示方法, ...
- 【题解】【蓝桥杯】回文日期
题目链接 回文日期 题目描述 解题思路 首先就是日期判断,注意这个地方是日期,而不是这之间的所有数据 例如44444444这种虽说是回文串,但是并不是日期,所以需要排除 判断回文串其实不用打表,因为真 ...
- 蓝桥杯(Java) 回文日期
题目描述 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日.因为如果将这个日期按 "yyyymmdd" 的格式写成一个 8 位数是 202002 ...
- 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】
试题 历届真题 回文日期[第十一届][省赛][B组] 提交此题 评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 哎话说好久没写过日期题了,回忆起刚学的时候被日期统治的恐惧了
- 输出指定要求的回文日期与字符串拼接
知识点:字符串拼接 (1)字符串直接用+拼接 演示直接用+连接两个字符串 这样会有三个内存单元来存放字符串,浪费内存空间,建议采用StringBuffer(线程安全)或者StringBuilder(线 ...
- 蓝桥杯 回文日期(Java)
解题思路 1.首先要满足回文的形式,即ABCDDCBA,对于回文的判断用数组会方便许多. 2.ABABBABA型:此处也可以使用数组判断是否是回文型. 3.要满足日期的格式. 暴力求解思路:预先存储好 ...
- 蓝桥杯 历届试题 回文日期 C
问题描述 2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日. 因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 20200202,恰好是一个回文数.我们称这样的日 ...
最新文章
- keepalived介绍和配置
- python3 限定方法参数 返回值 变量 类型
- 为什么 Java 不支持运算符重载?
- vue项目中使用echarts实现词云
- gj12-2 协程和异步io
- DirectXInput
- 用一句位运算判断两个整数的大小并返回较大者
- Qt5及模块架构分析
- sass 混入 (@mixin 与 @include的使用)
- Commons IO -- IOUtils
- springboot如何快速访问templates下的html
- 使用ADB卸载Android内置应用
- 远程桌面连接计算机是什么,远程桌面连接是什么意思?
- bitset和bitget
- MybatisPlus学习〖四〗报错篇 WARNWarn: Could not find @TableId in Class: com.fehead.OceanCode.dataobject
- vue-quill-editor富文本编辑器自定义上传图片功能
- Solaris培训第二章:OpenBoot PROM(转)
- 第十七届全国大学生智能汽车竞赛安徽赛区 暨安徽省第十五届大学生智能汽车竞赛 闭幕式致辞
- 从子弹短信到聊天宝,老罗靠什么挑战微信?
- windows修改ip地址
热门文章
- ResourceBundle使用详解
- firebug下载时出现there was an error loading firebug
- ISO 27001信息安全管理体系认证
- 怎么用计算机求logo,小学计算机教学中的LOGO语言教学(转载)
- 关于需求跟踪矩阵的6个问题
- CA/B论坛又出新动作了!代码签名证书最小密钥长度将于6月增强至3072位
- 0xc0150002(0xc0150002一键修复win10)
- Android 多媒体框架stagefright
- LoadRunner教程(22)-LoadRunner C语言脚本
- mysql 主键B+Tree 3层存2000W行数据