当前位置: 首页 > wzjs >正文

江西东乡网站建设淘宝网页版

江西东乡网站建设,淘宝网页版,遵义网站建公司,百度搜索网站包含的功能103. 时间问题(暴力枚举) 1. 2017年蓝桥杯省赛 - 日期问题(困难) 标签:2017 暴力 枚举 省赛 1.1 题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2…

103. 时间问题(暴力枚举)

1. 2017年蓝桥杯省赛 - 日期问题(困难)

标签:2017 暴力 枚举 省赛

1.1 题目描述

小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在 1960 年 1 月 1 日至 2059 年 12 月 31 日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如 02/03/04,可能是 2002 年 03 月 04 日、2004 年 02 月 03 日或 2004 年 03 月 02 日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

1.2 输入描述

一个日期,格式是 “ A A / B B / C C AA/BB/CC AA/BB/CC ( 0 ≤ A , B , C ≤ 9 ) (0≤A,B,C≤9) (0A,B,C9)

1.3 输出描述

输出若干个不相同的日期,每个日期一行,格式是 “ y y y y − M M − d d yyyy−MM−dd yyyyMMdd”。多个日期按从早到晚排列。

1.4 输入输出样例

示例:

输入

02/03/04

输出

2002-03-04
2004-02-03
2004-03-02

1.5 运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

2. 解题思路

本题核心思路是枚举 + 校验合法性 + 排序去重,具体步骤如下:

  1. 解析日期三元组: 输入为 AA/BB/CC,分别代表三个部分,可能是年/月/日的任意排列;

  2. 枚举三种排列方式:

    • AA/BB/CC年/月/日
    • CC/AA/BB月/日/年
    • CC/BB/AA日/月/年
  3. 年份补全规则:

    • 60 ≤ year ≤ 99 → 补为 19xx
    • 00 ≤ year ≤ 59 → 补为 20xx

    year = { 1900 + y , if  y ≥ 60 2000 + y , if  y < 60 \text{year} = \begin{cases} 1900 + y, & \text{if } y \geq 60 \\ 2000 + y, & \text{if } y < 60 \end{cases} year={1900+y,2000+y,if y60if y<60

  4. 日期合法性校验:

    • 月份范围:1~12
    • 日期范围:根据月份和是否闰年判断(尤其是2月)

    is_leap ( y ) = { True , if  y m o d 400 = 0 True , if  y m o d 4 = 0 and  y m o d 100 ≠ 0 False , otherwise \text{is\_leap}(y) = \begin{cases} \text{True}, & \text{if } y \bmod 400 = 0 \\ \text{True}, & \text{if } y \bmod 4 = 0 \text{ and } y \bmod 100 \ne 0 \\ \text{False}, & \text{otherwise} \end{cases} is_leap(y)= True,True,False,if ymod400=0if ymod4=0 and ymod100=0otherwise

  5. 排序并去重输出。

|——2002-03-04——|——2004-02-03——|——2004-03-02——>

3. 代码实现

# 02/03/04
# 年/月/日,    2002-03-04  =>  2002-03-04
# 月/日/年,    02-03-2004  =>  2004-02-03
# 日/月/年,    02-03-2004  =>  2004-03-02# 读取输入,形如 02/03/04
# a, b, c = map(int, '02/03/04'.split('/'))
a, b, c = map(int, input().split('/'))# 月份与天数对应关系
dc = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30,7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31
}# 补全年份:60-99为19xx,0-59为20xx
def hs_1(y):if y >= 60:y += 1900else:y += 2000return y# 判断闰年
def hs_2(y):if y % 400 == 0:return Trueelif y % 4 == 0 and y % 100 != 0:return Trueelse:return False# 创建日期列表
s = []for y, m, d in [[a, b, c],  # a年/b月/c日[c, a, b],  # a月/b日/c年[c, b, a],  # a日/b月/c年
]:y = hs_1(y)  # 转换年份if 1 <= m <= 12:  # 月份范围正确max_day = dc[m]  # 获取该月最大天数if m == 2 and hs_2(y):  # 闰年 2 月处理max_day = 29if 1 <= d <= max_day:  # 日期范围正确s.append([y, m, d])# 排序并去重输出
s.sort()
k = 0
print('{}-{:02}-{:02}'.format(s[0][0], s[0][1], s[0][2]))
for i in range(len(s)):if s[k] != s[i]:  # 对输出结果进行去重k = iprint('{}-{:02}-{:02}'.format(s[i][0], s[i][1], s[i][2]))

4. 复杂度分析

  • 时间复杂度: O ( 1 ) O(1) O(1),枚举固定的3种排列方式,对每种情况进行常数时间的合法性判断和排序。
  • 空间复杂度: O ( 1 ) O(1) O(1), 最多存储3个合法日期,使用常数空间。
http://www.dtcms.com/wzjs/407500.html

相关文章:

  • 档案信息网站建设工作经验郑州网络营销排名
  • 学校seo推广培训班谷歌seo最好的公司
  • 成都专做婚介网站的公司开发一款app软件需要多少钱
  • 河北住房和城乡建设局网站首页广州seo网站推广平台
  • 品牌十大网maigoo官网提升seo排名
  • 平凉网站建设平凉贵阳网络推广外包
  • 网站开发女生可以做吗免费注册网站有哪些
  • 网上商城web相城seo网站优化软件
  • 做编程的+网站有哪些内容站长之家官网
  • 做二手房比较好的网站域名注册需要多久
  • wordpress 用户登录记录青岛网站seo诊断
  • 厦门哪家做网站好六六seo基础运营第三讲
  • b2b网站计划书什么是网站推广?
  • 网站注销主体注销今日国内新闻最新消息10条
  • 怎么做微信推送 网站免费视频外链生成推荐
  • 建网站和做微信哪个好如何创建一个自己的网站
  • 攀枝花仁和住房和城乡建设局网站百度下载安装2021
  • 卓越网站建设的优点sem竞价推广代运营
  • 商业空间设计心得体会seo线上培训多少钱
  • 建筑方案设计步骤seo网络培训机构
  • 外贸网站导航栏建设技巧网站推广培训
  • 网站排队队列怎么做怎样做一个网站平台
  • 织梦网站logo修改我对网络营销的理解
  • 做搜狗pc网站优化最新天气预报最新消息
  • 如何做网站赚钱百度网盘下载速度慢破解方法
  • 微商的自己做网站叫什么软件如何自己做一个软件
  • 做相亲网站赚钱吗北京疫情最新新闻
  • 建设网站简单教程百度官网网址
  • 2017年网站建设视频教程网站建设制作模板
  • 买过域名之前就可以做网站了吗?排名优化网站