UVa 621 Secret Research

发布时间:2026/7/3 18:25:25
UVa 621 Secret Research 题目描述某实验室的机密研究结果经过加密存储每条实验结果对应一种结果类型阳性positive result\texttt{positive result}positive result、阴性negative result\texttt{negative result}negative result、实验失败experiment failed\texttt{experiment failed}experiment failed或实验未完成experiment not completed\texttt{experiment not completed}experiment not completed。加密后的结果是一个数字字符串SSS其格式符合以下四种模式之一阳性结果S1S 1S1或S4S 4S4或S78S 78S78阴性结果SS35S S35SS35即以35结尾实验失败S9S4S 9S4S9S4即以9开头且以4结尾实验未完成S190SS 190SS190S即以190开头若一个字符串同时匹配多种模式则按上述顺序优先输出第一种匹配结果。输入格式第一行为整数nnn表示待解密结果的数量。接下来nnn行每行一个数字字符串由ASCII\texttt{ASCII}ASCII数字组成。输出格式对于每个字符串输出一行对应的结果符号表示阳性-表示阴性*表示实验失败?表示实验未完成样例输入4 78 7835 19078 944输出 - ? *题目分析本题的匹配规则非常简单仅需检查字符串是否满足四种固定模式。按给定顺序判断即可因为一旦匹配即输出符合优先级要求。具体条件字符串完全等于1、4或78。字符串以35结尾即长度至少为222且最后两个字符为35。字符串以9开头且以4结尾长度至少为222。字符串以190开头长度至少为333。由于条件不重叠除了长度很短的特殊情况按顺序检查即可。解题思路读入nnn后对每个字符串若长度为111且为1或4或者等于78输出。否则若倒数第二个字符为3且最后一个字符为5输出-。否则若第一个字符为9且最后一个字符为4输出*。否则输出?。复杂度分析每个字符串仅进行常数次字符比较时间复杂度O(n⋅L)O(n \cdot L)O(n⋅L)其中LLL为字符串长度可视为常数空间复杂度O(1)O(1)O(1)。代码实现// Secret Research// UVa ID: 621// Verdict: Accepted// Submission Date: 2016-08-17// UVa Run Time: 0.000s//// 版权所有C2016邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intn;cinn;cin.ignore(1024,\n);string line;for(inti1;in;i){getline(cin,line);if(line1||line4||line78)cout\n;elseif(line[line.length()-2]3line[line.length()-1]5)cout-\n;elseif(line.front()9line.back()4)cout*\n;elsecout?\n;}return0;}总结本题是一道简单的字符串模式匹配题按照描述顺序进行条件判断即可。由于模式非常具体无需复杂算法。关键在于理解符号表示以及按优先级匹配避免因条件重叠而出错。该题适合初学者练习字符串基本操作和条件分支。