前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PAT-2021年秋季考试 乙级 7-3 自定义判题程序 (20 分)

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

原创
作者头像
freesan44
修改2021-09-14 10:38:23
3860
修改2021-09-14 10:38:23
举报
文章被收录于专栏:freesan44

题目

在每次允许插入、删除、修改一个字符的前提下,用最少的动作把一个字符串变成另一个字符串,是一道著名的可以用动态规划解决的问题。但判题的麻烦之处在于,虽然最小代价是唯一的,但变换方法却是不唯一的。例如把 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 步操作并可以完成字符串的变换,则称为一个“可行解”。所谓“正确提交”,是指所有提交的可行解中的最优解。

代码语言:txt
复制
输入样例:

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

解题思路

代码语言:txt
复制
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")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 解题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档