HDU 1073 Online Judge-一个啥也不知道的小白

该代码实现了一个简单的模拟在线评委系统,用于判断用户提交的程序输出是否符合预期。系统会根据输入的正确输出和用户结果,判断返回'Accepted'(AC)、'PresentationError'(PE)或'WrongAnswer'(WA)。通过比较去除空格、制表符和换行符后的字符串来确定结果。
摘要由CSDN通过智能技术生成

题目

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
问题描述
Ignatius正在建立一个在线法官,现在他已经解决了除法官系统以外的所有问题。系统必须从正确的输出文件和用户的结果文件中读取数据,然后系统将这两个文件进行比较。如果两个文件绝对相同,那么法官系统将返回“已接受”,否则,如果两个文件之间的唯一区别是空格(’’),tabs(’\ t’)或enters(’\ n’),判断系统应返回“ Presentation Error”,否则系统将返回“ Wrong Answer”。

给定正确输出文件的数据和用户结果文件的数据,您的任务是确定评审系统将返回哪个结果。

输入项
输入包含几个测试用例。输入的第一行是单个整数T,它是测试用例的数量。随后是T测试用例。
每个测试用例都有两部分,正确的输出文件的数据和用户的结果文件的数据。它们都是以包含字符串“ START”的单行开头和包含字符串“ END”的单行结尾,这两个字符串不是数据。换句话说,数据在两个字符串之间。数据最多为5000个字符。

输出量
对于每个测试用例,您应该输出判断系统应返回的结果。

Sample Input
4
START
1 + 2 = 3
END
START
1+2=3
END
START
1 + 2 = 3
END
START
1 + 2 = 3

END
START
1 + 2 = 3
END
START
1 + 2 = 4
END
START
1 + 2 = 3
END
START
1 + 2 = 3
END

Sample Output
Presentation Error
Presentation Error
Wrong Answer
Presentation Error

分析

就是输入输出,简单的判断PE,WA,AC这几种情况。START是开始输入了,END是结束输入了。数据在这个之间!每一组有2个START和END。就是判断这2个之间的数据是PE,WA还是AC。用2字符串分别存储这2个需要比较的数据,遇到换行需要在字符串中加入’\n’。先看这2个字符串是不是相等,如果相等,就是AC。不相等,再来判断是PE还是WA。

代码片.

/*
模拟OJ系统进行测评的过程
如何去测评两组数据呢?完全匹配当然就是AC啦,那PE和WA如何发现呢?
题目思路:
将输入的两组数据去掉'\n','\t' 和' ',得到新的两组数据,
那么这两组数据如果不是完全匹配的,结果一定是WA。
如果这两组匹配了,去掉'\n','\t' 和' '前的不完全匹配则是PE。
如果去掉前的两组数据完全匹配,则是AC。
*/
#include <string>
#include <iostream>

using namespace std;

void pr(string& x, string& y)  //重点,字符串处理,分别针对两种情况进行处理
{
    string t;
    string r = "";
    while (getline(cin, t))
    {
        if (t == "END")
            break;
        r += (t + '\n');   //注意回车
    }
    for (int i = 0; i < r.length(); i++)
    {

        if (r[i] != ' ' && r[i] != '\n' && r[i] != '\t')
        {
            x += r[i];
        }
        else
            y += r[i];
    }
}
int main()
{
    int n;
    cin >> n;
    string s;
    while (n--)
    {
        string x1, x2, y1, y2;
        cin >> s;
        pr(x1, y1);
        cin >> s;
        pr(x2, y2);

        if (x1 == x2 && y1 == y2)
        {
            cout << "Accepted";
        }
        else if (x1 == x2 && y1 != y2)
        {
            cout << "Presentation Error";
        }
        else
            cout << "Wrong Answer";
        cout << endl;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值