PAT-2021年秋季考试 乙级 7-3 自定义判题程序 (20 分)

简介: 在每次允许插入、删除、修改一个字符的前提下,用最少的动作把一个字符串变成另一个字符串,是一道著名的可以用动态规划解决的问题。

题目


在每次允许插入、删除、修改一个字符的前提下,用最少的动作把一个字符串变成另一个字符串,是一道著名的可以用动态规划解决的问题。但判题的麻烦之处在于,虽然最小代价是唯一的,但变换方法却是不唯一的。例如把 PAT 变成 PTA 最少需要 2 步,可以保持第 1 个字母不变,修改后面 2 个字母,也可以保持第 1、2 个字母不变,在 A 前面插入 T,后面删除 T。由于拼题 A 系统的默认判题程序只能通过比对输出文件来判断对错,对这种正确答案输出不唯一的题目就不能处理了,需要出题者额外编写一个自定义判题程序来解决问题。


本题就请你编写这个自定义判题程序,读入两个字符串和用户程序产生的输出结果,判断他们的程序输出是否正确。


输入格式: 输入首先在前两行分别给出两个不超过 1000 个字符、以回车结束的非空字符串,第 1 行对应初始字符串,第 2 行对应目标字符串。


随后一行给出一个正整数 N(≤100),为需要判断的提交数。


接下来是 N 个提交的输出结果,每个结果占 2 行:第 1 行给出一个整数 K(不超出 32 位 int 的范围),为用户输出的动作数;第 2 行顺次描述对初始字符串的每个字符所做的操作:


如果这个字符不变,则在对应位置输出 0 如果这个字符被删除,则在对应位置输出 1 如果这个字符被改变,则在对应位置输出 2 如果这个字符前面或者后面插入了一个字符,则在插入的位置输出 3 注意我们要求用户提交的行首尾和数字间均无空格,所以如果有多余空格应判为错误。


题目保证这个操作序列不为空。


输出格式: 对每个正确的提交,在一行中输出 AC;否则输出 WA。


注意:这里并不要求你会用动态规划求出最优解。所以对“正确提交”的判断,并不以动态规划求出的最优解为根据! 对于用户输出的 K,如果其操作序列的确给出了 K 步操作并可以完成字符串的变换,则称为一个“可行解”。所谓“正确提交”,是指所有提交的可行解中的最优解。


输入样例:
This is a test.
Tom is a cat.
6
8
02330001100022100
8
11113330000001113300
6
022100000012200
5
033310000000200
6
0 2 2 1 000000 1 2 2 00
6
012200000022100
输出样例:
WA
WA
AC
WA
WA
AC

解题思路

start = input()
target = input()
N = int(input())
# start = "This is a test."
# target = "Tom is a cat."
# N = int("1")
for _ in range(N):
    actionNum = int(input())
    testStr = list(input())
    # actionNum = int("6")
    # testStr = list("0 2 2 1 000000 1 2 2 00")
    left = 0
    right = 0#对的数组index
    res = ""
    while len(testStr)!=0:
        s = testStr.pop(0)
        if s == "0":
            res += start[left]
            left += 1
            right += 1
        elif s == "1":
            # print(start[left])
            left += 1
            # print(start[left])
            actionNum -= 1
        elif s == "2":
            res += target[right]
            left += 1
            right += 1
            actionNum -= 1
        elif s == "3":
            res += target[right]
            right += 1
            actionNum -= 1
        else:
            actionNum = -1
        # print(left,right)
        # print(s,res)
    # print(res)
    if res == target and actionNum == 0:
        print("AC")
    else:
        print("WA")


目录
相关文章
|
7月前
L1-043 阅览室 (20 分)(在线模拟题)
L1-043 阅览室 (20 分)(在线模拟题)
61 0
|
6月前
|
Java
上周考试错题类型总结(接口型)
上周考试错题类型总结(接口型)
|
7月前
|
自然语言处理 监控 数据可视化
第七章项目范围管理(选择4分,偶尔考案例)
第七章项目范围管理(选择4分,偶尔考案例)
119 0
|
7月前
【中级软件设计师】—(针对上午题)输入输出控制方式(二十)
【中级软件设计师】—(针对上午题)输入输出控制方式(二十)
|
云计算
阿里云认证多少分通过?考试难不难?
阿里云可以说是云计算行业内的龙头企业了,不仅和众多领域有所合作,而且合作的对象很多是业界大佬,进入阿里云也是很多毕业生的梦想。
|
机器学习/深度学习 存储 人工智能
【第十四届蓝桥杯】第三期官方校内模拟赛B组C++题解(已修正完毕,均可AC100%)
文章目录 写在前面 一、字母数(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 二、列名(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 三、特殊日期(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 四、大乘积(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 ==五、最大连通==(已修正) 题目描述 解题报告 1、大体思路 2、代码详解 六、星期几(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 七、信号覆盖(AC100%) 题目描述 解题报告 1、大体思路 2、代码详解 八、清理水域(AC100%) 题目描述 解
467 0
|
安全 Go 区块链
分投趣fintoch开发丨fintoch分投趣系统开发方案详细丨分投趣fintoch系统源码案例
  DAPP是Decentralized Application的缩写,即去中心化应用,也有人称为分布式应用。它被认为开启了区块链3.0时代。DAPP就是在底层区块链平台衍生的各种分布式应用,是区块链世界中的服务提供形式。DAPP之于区块链,有些类似APP之于IOS和Android。
L1-043 阅览室 (20 分)(在线模拟题
L1-043 阅览室 (20 分)(在线模拟题
123 0
L1-043 阅览室 (20 分)(在线模拟题
PAT-2021年秋季考试 乙级 7-2 数以类聚 (20 分)
我们把所有各位数字的乘积相同的数归为一类。例如 1362 和 2332 就是同一类,因为 1×3×6×2=2×3×3×2。给定 N 个正整数,请你判断它们可以被归成多少不同的类?
134 0
PAT-2021年秋季考试 乙级 7-1 好数 (15 分)
好数是指由一对正整数 a<b 按照 a 2 +ab+b 2 这个规则生成的数,a 和 b 就称为这个好数的源头。
118 0