• Codeforces Round #705 (Div. 2) B. Planet Lapituletti(镜像时钟) 思维


    传送门 https://codeforces.com/contest/1493/problem/B

    题目:

     

    Example
    input
    5
    24 60
    12:21
    24 60
    23:59
    90 80
    52:26
    1 100
    00:01
    10 10
    04:04
    
    output
    12:21
    00:00
    52:28
    00:00
    00:00


    题意
    给定一个时钟, 小时最大值与分钟最大值, 再输入一个时钟, 要求将该时钟通过镜子水平镜像后仍符合小时最大值与分钟最大值
    若不符合, 则时钟分钟值+1, 分钟值达到最大值-1时, 分钟值归零, 小时值+1, 注意, 这里可以遍历到明天的这个时间,
    直到符合
    为止, 输出镜面反射前的时钟.
    其中 0 <= 分钟值 <= 分钟最大值, 0 <= 小时值 <= 小时最大值.



    解析
    举个栗子:
    对于分钟, 从给定的分钟值开始遍历, 以分钟最大值-1为最大值, 将分钟镜像转化为小时(翻转 + 镜像, 和在纸反面看字效果一样)
    如果在小时标准内, 则可行.
    循环结束, 若无可行方案, 返回 0, (毕竟00:00总是符合的, 与其换到第二天, 不如直接00:00)

    对于小时同理, 共用一个函数就行.

    你以为这样就完了吗, 如果是, 那恭喜你wa了
    看个样例
      12 45
      05:25
    结果应为10:00, 而这里运行到最后, 是05:00,  最后应该再判断分钟是否加到最大归零了, 如果分钟==0, 
    并且初始读入的分钟!=0 并且 小时!= 初始读入的小时,那么小时+1, 再找一遍成立的镜像.




    代码(嘿嘿, 看起来不是很长~, 诸位加油看)
    #include <iostream>
    using namespace std;
    //每个数字的镜像结果
    const int change[10] = {0, 1, 5, 100, 100, 2, 100, 100, 8, 100};
    int f(int now, int tar, int n) {
      //now是开始的值, tar是最大值, n是(若now为分钟, 则n为小时, 反之为分钟)的最大值, n和tar就是防止越界的
    for(int i = now; i < tar; i ++) {   if(change[i % 10] != 100 && change[i / 10] != 100 && change[i%10] * 10 + change[i/10] < n) return i; } return 0; } int main() { int t; cin >> t; while(t --) { int h, m, h1, m1; cin >> h >> m;//最大小时,分钟值 scanf("%d:%d", &h1, &m1); int res_h = f(h1, h, m); int res_m; if(res_h != h1)//如果小时往前进位了, 那么分钟就从0开始遍历, 若小时值没变, 则从分钟值开始遍历 res_m = f(0, m, h); else res_m = f(m1, m, h); if(res_m == 0 && m1 != 0 && res_h == h1)//若分钟归零, 且小时没进位, 那小时进位再找符合条件的 res_h = f(res_h+1, h, m); printf("%d%d:%d%d ", res_h / 10, res_h % 10, res_m / 10, res_m % 10);
    }
    return 0; }
    
    
    

    附:本人wa的4个样例
    4
    51 3
    30:01
    51 3
    30:01
    11 79
    00:24
    12 45
    05:25
    理应50:00  50:00  00:50  10:00
    输出00:01   00:01   00:00  05:00
    

      



  • 相关阅读:
    zabbix监控部署(三)
    zabbix监控部署(二)
    zabbix监控部署(一)
    Docker安装mysql5.7
    Docker修改容器默认存储路径
    MySQL全量+增量备份脚本
    企业级Dokcer镜像仓库Harbor部署
    Linux环境pyhon3安装pyinstaller
    配置Hive元数据数据库为PostgreSQL
    Oracle 11gR2 RAC 添加节点
  • 原文地址:https://www.cnblogs.com/la-la-wanf/p/14500467.html
Copyright © 2020-2023  润新知