NOIP 普及组 2016 回文日期
传送门
https://www.cnblogs.com/violet-acmer/p/9859003.html
题解:
思路1:
相关变量解释:
year1,month1,day1 : date1对应的年、月、日
year2,month2,day2 : date2对应的年、月、日
这道题算是考思维+Code能力??
易得,每一年最多有一个回文日期;
例如 2000 的回文日期为 2000 0002
for i : year1 to year2
找到每个 i 的回文日期对应的月(month)、日(day),并进行两个判断
(1):判断month,day是否合法。
(2):判断当前日期是否在date1与date2之间
思路2.
枚举月和日对应的回文年份,看其回文组成的八位数是否在date1和date2内,什么意思呢?
例如,对于01月23日,其对应的回文年份为3210,其回文组成的八位数为 32100123,在和输入的date1与date2比较,看是否在其中,如果在,Count++;
不用特判某一年是否为闰年,为什么呢?
某年是否为闰年只会影响 2 月的天数,2月最多有 29 天,其对应的回文年份为 9220,但9220是闰年。
思路2来自集训队队员博客:https://blog.csdn.net/QLU_minoz/article/details/83450635
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define isSat(x) ((x) >= 1 &&(x) <= 12)//判断是否为合法的月份 4 #define isRun(x) ((x%4 == 0 && x%100 != 0) || (x%400 == 0))//判断是否为闰年 5 6 char data[2][8]; 7 int monthDay[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31}, //0 : 平年 8 {0,31,29,31,30,31,30,31,31,30,31,30,31}};//1 : 闰年 9 10 int Transform(int a,int b,int d){//将字符串对应的年、月、日转化成数子 11 int num=0; 12 for(int i=a;i <= b;++i) 13 num=num*10+(data[d][i]-'0'); 14 return num; 15 } 16 void Search(int year,char *s){ 17 int index=0; 18 do 19 { 20 s[index++]=year%10+'0'; 21 year /= 10; 22 }while(year != 0); 23 } 24 void Solve() 25 { 26 int year1=Transform(0,3,0),month1=Transform(4,5,0),day1=Transform(6,7,0); 27 int year2=Transform(0,3,1),month2=Transform(4,5,1),day2=Transform(6,7,1); 28 int res=0; 29 int pre=0; 30 for(int i=year1;i <= year2;++i) 31 { 32 char s[4]; 33 Search(i,s);//找到将当前的年份的回文 34 int month=(s[0]-'0')*10+(s[1]-'0');//当前年份的回文对应的月 35 int day=(s[2]-'0')*10+(s[3]-'0');//日 36 if(!isSat(month) || day > monthDay[isRun(i)][month]) 37 continue; 38 if(year1 == year2) 39 { 40 if(month > month1 || (month == month1 && day >= day1)) 41 { 42 if(month < month2 || (month == month2 && day <= day2)) 43 res++; 44 } 45 } 46 else 47 { 48 if(i == year1) 49 res += (month > month1 || (month == month1 && day >= day1) ? 1:0); 50 else if(i == year2) 51 res += (month < month2 || (month == month2 && day <= day2) ? 1:0); 52 else//如果year1 != year2 ,且 i != year1 && i != year2 ,则当前合法的日期一定在date1和date2之间 53 res++; 54 } 55 } 56 printf("%d\n",res); 57 } 58 int main() 59 { 60 scanf("%s%s",data[0],data[1]); 61 Solve(); 62 }
思路1
1 #include<bits/stdc++.h> 2 using namespace std; 3 int date1,date2; 4 int monthDay[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; 5 6 void Solve() 7 { 8 int res=0; 9 for(int i=1;i <= 12;++i)//枚举月份 10 for(int j=1;j <= monthDay[i];++j)//枚举每月对应的日 11 { 12 int year=j%10*1000+j/10*100+i%10*10+i/10;//当前月,日对应的回文年份 13 int cnt=year*10000+i*100+j;//回文日期对应的八位数 14 res += (cnt >= date1 && cnt <= date2 ? 1:0); 15 } 16 printf("%d\n",res); 17 } 18 int main() 19 { 20 scanf("%d%d",&date1,&date2); 21 Solve(); 22 }
思路2
转载于:https://www.cnblogs.com/violet-acmer/p/9860164.html
NOIP 普及组 2016 回文日期相关推荐
- 【NOIP普及组2016】魔法阵
@魔法阵@ @前言@ @题目描述@ @题目分析-暴力枚举O(m^4)@ @开始优化-桶思想优化O(n^3)@ @高端操作-学不来的数学分析O(n^2)@ @END@ @前言@ 听闻老前辈们道这道题好像 ...
- NOIP普及组历届真题(1997~2018)
供大家刷题. 先上快捷的查看方式:NOIP普及组历届真题 第二页 来自洛谷--一个很好的刷题网站 剩下是具体题目和难度以及是第几年的题. P1002 过河卒 NOIp普及组 2002 普及- P100 ...
- 蓝桥杯--历届真题 回文日期【第十一届】【省赛】【B组】
试题 历届真题 回文日期[第十一届][省赛][B组] 提交此题 评测记录 资源限制 时间限制:1.0s 内存限制:256.0MB 哎话说好久没写过日期题了,回忆起刚学的时候被日期统治的恐惧了
- Vijos P2010 回文日期【回文+日期计算】
描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期.显然:一个日期只有一种表示方法, ...
- NOIP普及组历年题目
文章目录 2003 413. 乒乓球 414. 数字游戏 415. 栈 416. 麦森数 2004 417. 不高兴的津津 418. 花生采摘 419. FBI树 420. 火星人 2005 421. ...
- 历年CSP-J(NOIP普及组)分类汇总目录
内容持续更新中... ... [2022CSPJ普及组]T1.乘方 数学问题 [2022CSPJ普及组]T2.解密 数学问题 ...
- CSP-J (NOIP普及组) 历年复赛真题考察内容(1998~2021)
TZOJ题目分类 本博客原文地址:https://www.cnblogs.com/BobHuang/p/14522022.html 其中,1.较简单题26题左右:2.动态规划17题,其中9题较好做:3 ...
- CSP-J复赛复习题目(NOIP普及组2000-2011)
CSP-J复赛复习题目(NOIP普及组2000-2011) NOIP普及组复赛(某个不存在的比赛)2000-2011年的题面和样例 可以用来复习CSP-J 建议去OJ上查看并提交 祝大家CSP RP+ ...
- 洛谷 题解 P2010 【回文日期】
因为有8个字符,所以可得出每一年只有一个回文日期. 因此只要判断每一年就行了. 做法: 我们先把年倒过来,例如2018年就倒为8102,就得出8102就是回文日期的后四个字符,我们只要判断一下有没有这 ...
最新文章
- 2009-ISIS命令与配置实验手册(可下载)
- 特别实用的 6 款 Python 特殊文本格式处理库推荐
- 微信小程序开发工具中快捷键
- oracle 统计分析 dic,数据库优化之统计分析实战篇
- java修改pdf内容流_java – 在PDFBox中,如何更改PDRectangle对象的原点(0,0)?
- Spring.NET 中的 ADO.NET 数据访问的示例
- select下拉框带模糊查询_如何实现参数级联查询
- ORACLE锁的管理
- 如何通过修改注册表来限定Win10 PIN的最小位数
- lduan server 2012 RMS 群集安装 上(十四)
- 并行学习框架下基于GAN的城市道路网短时路段交通预测方法
- 2018中南大学 计算机考研分数,中南大学2018年硕士研究生招生复试基本分数线
- 电脑php的基本方法是什么,做文员的基本电脑操作是什么
- 2022年MySQL最新面试题
- pg_regress 使用技巧
- 华为设备ARP配置命令
- 结构力学计算机矩阵位移法,结构力学-矩阵位移法.ppt
- 微信小程序实现顶部导航栏渐变
- 拉普拉斯金字塔分解及图像融合
- 新手如何组装一台电脑