P2010回文日期
这道题是2016年普及组的题,难度等级为普及—。
这道题仍然是个模拟题。有两种策略:1.枚举回文,看日期是否存在2.枚举日期,看是否是回文。显然,前者要快很多,并且准确。本蒟蒻第一次便使用了后者,bug频出,看了题解后想到了前者。并且在取位与字符串处理上出了问题qaq。最后被卡了几个数据点......
1.字符串中转int:-48即可。
2.调bug的时候可以规范输出来查错误。
3.模拟题一定要思考好for谁快。
4.模拟题思路一定要清晰,别先动键盘,先动笔,确定好有把握的策略。
伪代码:
string str1,str2;
int year1,year2;
int month1,month2;
int day1,day2;
int ans=0;
int day[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int rday[12]={31,29,31,30,31,30,31,31,30,31,30,31};
bool judge_r(int x){
if(x%400==0||(x%4==0&&x%10!=0)){
return true;
}
else return false;
}
int main(){
cin>>str1;
cin>>str2;
year1=(str1[0]-48)1000+(str1[1]-48)100+(str1[2]-48)10+(str1[3]-48);
year2=(str2[0]-48)1000+(str2[1]-48)100+(str2[2]-48)10+(str2[3]-48);
month1=(str1[4]-48)10+(str1[5]-48);
month2=(str2[4]-48)10+(str2[5]-48);
day1=(str1[6]-48)10+(str1[7]-48);
day2=(str2[6]-48)10+(str2[7]-48);
/cout<<year1<<month1<<day1<<endl;
cout<<year2<<month2<<day2<<endl;/
for(int i=year1;i<=year2;i++){
int month=(i%10)10+(i%100)/10; //回文
int date=i/1000+((i%1000)/100)10;
// cout<<month<<" "<<date<<endl;
if(judge_r){//闰年不存在
if(month>12) continue;
if(date>rday[month]) continue;
}
else{//普通年不存在
if(month>12) continue;
if(date>day[month]) continue;
}
if(i==year1){//必须大于左端点
if(month<month1){
continue;
}
else{
if(month==month1&&date<day1){
continue;
}
}
}
if(i==year2){//必须小于右端点
if(month>month2){
continue;
}
else{
if(month==month2&&date>day2){
continue;
}
}
}
ans++;
}
cout<<ans;
return 0;
}
P2010回文日期的更多相关文章
- 洛谷 P2010 回文日期 题解
P2010 回文日期 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日 ...
- P2010 回文日期
P2010 回文日期 题解 回文日期,一共8位,只需要枚举4位就好了其实,然后判断它是否合法 代码 #include<bits/stdc++.h> using namespace std; ...
- P2010 回文日期 题解
这题其实就是纯暴力,暴力,再暴力,毫无技巧可言(总之您怎么乱搞都不会超时QAQ) 首先,根据题意,我们明白每年自多产生一个回文日期,因为对于每年的三百多天,前四位是固定的. 所以,我们只需要进行一个从 ...
- 洛谷 P2010 回文日期
Noip2016普及组T2 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期 ...
- #P2010 回文日期 的题解
题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有 ...
- 洛谷 题解 P2010 【回文日期】
因为有8个字符,所以可得出每一年只有一个回文日期. 因此只要判断每一年就行了. 做法: 我们先把年倒过来,例如2018年就倒为8102,就得出8102就是回文日期的后四个字符,我们只要判断一下有没有这 ...
- [洛谷] P2010 [NOIP2016 普及组] 回文日期
点击查看代码 #include<bits/stdc++.h> using namespace std; int data1, data2, ans = 0, sum; int d[13] ...
- NOIP 2016 回文日期
洛谷P2010 https://www.luogu.org/problemnew/show/P2010 JDOJ 3313 https://neooj.com:8082/oldoj/problem.p ...
- NOIP 普及组 2016 回文日期
传送门 https://www.cnblogs.com/violet-acmer/p/9859003.html 题解: 思路1: 相关变量解释: year1,month1,day1 : date1对应 ...
随机推荐
- 30. ClustrixDB 分布式架构/Rebalancer
Rebalancer是一个自动化系统,用于维护集群中数据的健康分布.通过修改数据的分布和位置来响应“不健康”集群是Rebalancer的工作.Rebalancer是一个在线进程,它影响对集群的更改,对 ...
- 关于Fibonacci博弈的一些学习
关于Fibonacci博弈的一些学习 一道例题 问题 给定n(n≥2)个石头,游戏双方轮流取至少一个石子,取到最后一个石子的人算赢,但是要满足一下规则: 第一次取不能全部取完所有的石子. 设前一次取的 ...
- R 去掉非零元素
X <- X[X!=] Malign_score <- Malign_score[Malign_score>=0.0008]
- 【Leetcode】二叉树的层次遍历
题目: 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 思路:采用宽度优先搜索. 时间复杂度:O(n).n为节点的数量,遍历所有节 ...
- Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类
FileService.java也就是操作sdcard的工具类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- 步步向前之Element-UI
Table 固定表头 只要在el-table元素中定义了height属性,即可实现固定表头的表格,而不需要额外的代码.例如: <el-table :data="tableData3&q ...
- 一台linux机器远程mount另一台linux机器
本机电脑系统是unbantu,要将另一台linux电脑上的文件mount到本机目录下.mount的原理是网络文件系统,即NFS,本机操作步骤如下 一,安装 nfs-common : apt inst ...
- KVM 常用命令
显示虚拟机 virsh list --all 停止虚拟机 virsh destroy <name> 启动虚拟机 virsh start <name> 删除虚拟机 virsh u ...
- Linux驱动开发10——内核环形双向链表
Linux内核环形双向链表本身不实现锁机制,需要驱动本身完成锁机制实现. 1.1.list_head结构体 #include <linux/list.h> struct list_head ...
- springMVC4+spring4+hibernate4框架搭建
最近项目不是很忙,整理了一个springMVC框架给大家分享下,框架结构:springMVC4+spring4+hibernate4,主要是spring配置.springmvc配置.hibernate ...