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代码:
#include<bits/stdc++.h>
using namespace std;
#define isSat(x) ((x) >= 1 &&(x) <= 12)//判断是否为合法的月份
#define isRun(x) ((x%4 == 0 && x%100 != 0) || (x%400 == 0))//判断是否为闰年 char data[][];
int monthDay[][]={{,,,,,,,,,,,,}, //0 : 平年
{,,,,,,,,,,,,}};//1 : 闰年 int Transform(int a,int b,int d){//将字符串对应的年、月、日转化成数子
int num=;
for(int i=a;i <= b;++i)
num=num*+(data[d][i]-'');
return num;
}
void Search(int year,char *s){
int index=;
do
{
s[index++]=year%+'';
year /= ;
}while(year != );
}
void Solve()
{
int year1=Transform(,,),month1=Transform(,,),day1=Transform(,,);
int year2=Transform(,,),month2=Transform(,,),day2=Transform(,,);
int res=;
int pre=;
for(int i=year1;i <= year2;++i)
{
char s[];
Search(i,s);//找到将当前的年份的回文
int month=(s[]-'')*+(s[]-'');//当前年份的回文对应的月
int day=(s[]-'')*+(s[]-'');//日
if(!isSat(month) || day > monthDay[isRun(i)][month])
continue;
if(year1 == year2)
{
if(month > month1 || (month == month1 && day >= day1))
{
if(month < month2 || (month == month2 && day <= day2))
res++;
}
}
else
{
if(i == year1)
res += (month > month1 || (month == month1 && day >= day1) ? :);
else if(i == year2)
res += (month < month2 || (month == month2 && day <= day2) ? :);
else//如果year1 != year2 ,且 i != year1 && i != year2 ,则当前合法的日期一定在date1和date2之间
res++;
}
}
printf("%d\n",res);
}
int main()
{
scanf("%s%s",data[],data[]);
Solve();
}
思路1
#include<bits/stdc++.h>
using namespace std;
int date1,date2;
int monthDay[]={,,,,,,,,,,,,}; void Solve()
{
int res=;
for(int i=;i <= ;++i)//枚举月份
for(int j=;j <= monthDay[i];++j)//枚举每月对应的日
{
int year=j%*+j/*+i%*+i/;//当前月,日对应的回文年份
int cnt=year*+i*+j;//回文日期对应的八位数
res += (cnt >= date1 && cnt <= date2 ? :);
}
printf("%d\n",res);
}
int main()
{
scanf("%d%d",&date1,&date2);
Solve();
}
思路2
NOIP 普及组 2016 回文日期的更多相关文章
- 2016NOIP普及组T2回文日期
回文日期 分类:枚举,函数 [题目描述] 日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后2位代表日期 ...
- 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 这次比赛,上来还是死抠第一题,用了一个半小时才 AC,还是太菜了............ ...
- NOIP【2016普及组】 考后有感(买铅笔,回文日期,海港,魔法阵)
普及组考试已落下大幕,但我们那扑通扑通等待成绩的心仍然无法平静,先来给四道题做一个总结: 一. 买铅笔 自评难度:1星 其实这道题没有什么难度,生命之题,满分必拿,100分,保底啦~\(≧▽≦)/~ ...
- [洛谷] P2010 [NOIP2016 普及组] 回文日期
点击查看代码 #include<bits/stdc++.h> using namespace std; int data1, data2, ans = 0, sum; int d[13] ...
- 2016.8.16上午纪中初中部NOIP普及组比赛
2016.8.16上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1334 这次也翻车了,感觉比之前难多了. 辛辛苦苦改完了,太难改 ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
- 2016.9.15初中部上午NOIP普及组比赛总结
2016.9.15初中部上午NOIP普及组比赛总结 2016.09.15[初中部 NOIP普及组 ]模拟赛 又翻车了!表示时超和空超很可恨! 进度 比赛:AC+0+0+20=120 改题:AC+80+ ...
- 2016.9.10初中部上午NOIP普及组比赛总结
2016.9.10初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1340 好不爽!翻车了!不过排名差不多在中间偏上一点, 还好不是 ...
随机推荐
- oracle数据库添加新用户
/*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace kmyf_temp tempfile 'E:\app\pangxy\product\11. ...
- spring cloud bus原理总结
1.spring cloud bus spring cloud是按照spring的配置对一系列微服务框架的集成,spring cloud bus是其中一个微服务框架,用于实现微服务之间的通信. spr ...
- 《Linux内核分析》课程第七周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- <<梦断代码>>阅读笔记二
这是第二篇读书笔记,这本书我已经读了有一大半了,感觉书中所描述的人都是疯子,一群有创造力,却又耐得住寂寞的疯子. 我从书中发现几点我比较感兴趣的内容. 第一个,乐高之梦.将程序用乐高积木一样拼接起来. ...
- 总结 推广app
扫一扫二维码即可安装使用我们的app,方便快捷. 电脑端下载地址:http://pan.baidu.com/s/1bocWPPX http://a.app.qq.com/o/simple.jsp?pk ...
- java 值传递 数组传递
在java中,不允许程序员选择值传递还是地址传递各个参数,基本类型总是按值传递.对于对象来说,是将对象的引用也就是副本传递给了方法,在方法中只有对对象进行修改才能影响该对象的值,操作对象的引用时是无法 ...
- mysql 和php 保留2位小数
一般交易中保留的数字的小数位数为2位(即最小单位为 1分钱[0.01元]) 数据库设计中预金钱有关或要求精准度要高的用 decimal(n,m) 表示,n表示保留的数字长度,保留的小数位数,如deci ...
- Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...
- Oracle11.2.0.1 升级Oracle11.2.0.4 后 listener 的端口改变需要处理
1. 因为Oracle采取了异地升级 发现 Oracle的端口号发生了变化: 2. 如果之前的连接还需要用的话 需要禁用 dbhome1 里面的监听 只打开dbhome2的监听 并且修改 监听的端口号 ...
- linux_查看磁盘与目录容量
一.查看磁盘容量命令df(report file system disk space usage) 终端运行 $ df 输出结果 我的物理主机上的 /dev/sda5 是对应着主机硬盘的分区,字母 a ...