惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
罗磊的独立博客
N
Netflix TechBlog - Medium
M
MIT News - Artificial intelligence
G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
小众软件
小众软件
Engineering at Meta
Engineering at Meta
D
DataBreaches.Net
S
SegmentFault 最新的问题
H
Help Net Security
量子位

OhYee 博客

小鹏辅助驾驶测评|OhYee 博客 小鹏非支持手机开启自动解锁|OhYee 博客 使用函数计算实现 301 重定向|OhYee 博客 针对 HTML 内容使用 Ant Design 图片弹框|OhYee 博客 博客进程泄露及僵尸进程解决|OhYee 博客 蓝易云服务器体验|OhYee 博客 SSH 调起本地 VSCode|OhYee 博客 【2022 秋招内推】阿里云后端研发工程师|OhYee 博客 使用函数计算获取 IP 地址信息|OhYee 博客 正确获取客户端 IP/HTTP Header 也可能重复|OhYee 博客 评测 Oculus Quest2 及 BigScreen|OhYee 博客 NextJS 热重载保留状态|OhYee 博客 如何优雅地贴 gist 代码|OhYee 博客 Linux 精细化文件权限|OhYee 博客 VSCode 容器开发环境|OhYee 博客 Clash 的不兼容更新排查|OhYee 博客 Zeek 导出 PCAP|OhYee 博客 记一次 ssh 配置问题|OhYee 博客 Git Commit 规范化工具|OhYee 博客 谈谈《星之卡比-探索发现》|OhYee 博客 VSCode 快捷键绑定 Shell 命令|OhYee 博客 ASN.1 语法及 X.509 证书格式解析解析|OhYee 博客 腾讯企业邮箱忽略 MX 记录发信|OhYee 博客 Chrome/Edge 标签组插件|OhYee 博客 【应届内推】阿里云后端研发工程师|OhYee 博客 损坏的 Typecho 备份处理为 JSON|OhYee 博客 VS Code VIM 插件高效使用|OhYee 博客 SSH 正反向代理|OhYee 博客 Let's Encrypt 根证书过期引发的问题|OhYee 博客 OpenWRT 忽略内核依赖|OhYee 博客
PAT乙级 1014.福尔摩斯的约会|OhYee 博客
2018-06-12 · via OhYee 博客

题目

原题链接

大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母's'出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入格式:

输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

输出格式:

在一行中输出约会的时间,格式为“DAY
HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

输入样例:
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm

输出样例:
THU 14:04

解析

实际的题意应该是:
找到前两个字符串第一个相同的大写字符(A~G)的位置,找到从这个位置后相同的大写字符(A~N)或者数字的位置。
找到后两个字符串的字母中相同的位置

然后按要求即可

代码

C++解法

#include <cmath>
#include <iostream>
#include <string>
using namespace std;

const char weekday[7][4] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    string a, b, c, d;
    cin >> a >> b >> c >> d;

    int len1 = min(a.size(), b.size());
    int apos = -1;
    int bpos = -1;

    for (int i = 0; i < len1; ++i) {
        if (apos == -1) {
            if (a[i] == b[i] && a[i] >= 'A' && a[i] <= 'G') {
                apos = i;
            }
        } else {
            if (a[i] == b[i] && ((a[i] >= 'A' && a[i] <= 'N') ||
                                 (a[i] >= '0' && a[i] <= '9'))) {
                if (i != apos) {
                    bpos = i;
                    break;
                }
            }
        }
    }

    int len2 = min(c.size(), d.size());
    int cpos = -1;
    for (int i = 0; i < len2; ++i) {
        if (c[i] == d[i] && ((c[i] >= 'A' && c[i] <= 'Z')||(c[i] >= 'a' && c[i] <= 'z'))) {
            cpos = i;
            break;
        }
    }

    printf("%s %02d:%02d\n", weekday[a[apos] - 'A'],
           (a[bpos] <= '9' ? a[bpos] - '0' : a[bpos] - 'A' + 10), cpos);

    return 0;
}

Python解法

read = []
try:
    while 1:
        s = input()
        if len(s) > 0:
            read.append(s)
except:
    pass

(a, b, c, d) = read

weekday = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]

A = -1
B = -1
C = -1


def checkChar(c, a, b):
    if ord(c) >= ord(a) and ord(c) <= ord(b):
        return True
    else:
        return False


length = min(len(a), len(b))
for i in range(length):
    if A == -1:
        if a[i] == b[i] and checkChar(a[i], 'A', 'G'):
            A = i
    else:
        if a[i] == b[i] and (checkChar(a[i], 'A', 'N') or a[i].isdigit()):
            B = i
            break

length = min(len(c), len(d))
for i in range(length):
    if c[i] == d[i] and c[i].isalpha():
        C = i


print("%s %02d:%02d" % (
    weekday[ord(a[A]) - ord('A')], ord(a[B]) -
    ord('0') if a[B].isdigit() else ord(a[B]) - ord('A') + 10,
    C))

Java解法

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
    public static final String[] weekday = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };

    public static void main(String[] args) throws Exception{

        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        String a = input.readLine();
        String b = input.readLine();
        String c = input.readLine();
        String d = input.readLine();

        int A = -1, B = -1, C = -1;

        int len = Math.min(a.length(), b.length());
        for (int i = 0; i < len; ++i) {
            char ac = a.charAt(i);
            char bc = b.charAt(i);
            if (A == -1) {
                if (ac == bc && ac >= 'A' && ac <= 'G') {
                    A = i;
                }
            } else {
                if (ac == bc && ((ac >= 'A' && ac <= 'N') || (ac >= '0' && ac <= '9'))) {
                    B = i;
                    break;
                }
            }
        }

        len = Math.min(c.length(), d.length());
        for (int i = 0; i < len; ++i) {
            char ac = c.charAt(i);
            char bc = d.charAt(i);
            if (ac == bc && ((ac >= 'A' && ac <= 'Z') || (ac >= 'a' && ac <= 'z'))) {
                C = i;
                break;
            }
        }

        System.out.printf("%s %02d:%02d\n", weekday[a.charAt(A) - 'A'],
                (a.charAt(B) <= '9' ? a.charAt(B) - '0' : a.charAt(B) - 'A' + 10), C);

    }
}