P2010 [NOIP2016 普及组] 回文日期(题解)

who:关键词

date1(起始日期
date2(终止日期)
ans(回文日期天数)

what:关键联系

什么样的日期是回文日期
(1)首先是合法日期
(2)回文日期特点
例如,2015是一个合法日期,它的回文日期是:5102但是这个回文日期不合法的所以,20150426不是回文日期
思考:(1)日期和回文日期之间如何转化
(2)是否合法
解决方案1:date1—date2逐一枚举,求出每天的回文日期劣 势:枚举每天,时间会超出108,
低效枚举(如,2049年这一年无效回文日期,按照方法1也需要每天枚举)

how:算法分析

解决方案1:枚举每一天
date1–date2逐一枚举每天,
求出每天的回文日期,
判断该回文日期是否合法劣势:
枚举每天,时间会超出10⁸,why低效枚举(如,2049年这一年无效回文
日期,按照方法1也需要每天枚举
时间复杂度是:8位数枚举10,I
空间复杂度:

解决方案2枚举一年时间why
由一年合法日期,
再推导出回文具体是哪一年,
再合成回文日期,
再判断该回文日期是否符合题意
时间复杂度:O(12个月31天)=O(372)=0(1)
求解步骤
(1)先求什么
根据一年中每天:月份+日期,求出回文日期年和回文日期的日例如,0423 i=04月份j=23日
回文日期的年:3240 p=j%10
1000+j/10100+1%1010+/101回文日期的日
0423 q=j%10
1+j/1010+9%10100+l/101000
(2)接着求什么
将每天日期转换成它的8位回文日期pqPq=p
10000+q;
(3)接着求什么
接着,判断该回文日期是否符合题意
(条件:date1≤qp≤date2))if(pq>=date1&&pgK=date2)符合题意,ans++

代码

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值