zoukankan      html  css  js  c++  java
  • UVa 10188 Automated Judge Script

     

    Problem A: Automated Judge Script

    The Problem

    The judges from the programming contests are known to be very mean and very lazy. We, judges, want less work and more Wrong Answers! So, we'd like you to help us and write an automated judge script to judge solution runs from teams all over the world. All you have to do is write a program which receives the standard solution and a team output and gives as answer one of the following messages: "Accepted", "Presentation Error" or "Wrong Answer". We define each one as:

    Accepted: As we are very mean judges, we only want you to give "Accepted" as answer if the team output matches the standard solution integrally. That is, ALL characters must match and must be in the same order.

    Presentation Error: We want you to give "Presentation Error" if all NUMERIC charaters match (and in the same order) but there is at least one non-numeric character wrong (or in wrong order).  For instance, "15 0" and "150" would receive a "Presentation Error", whereas "15 0" and "1 0" would not (it would receive "Wrong Answer", see bellow).

    Wrong Answer: If the team output could not be classified as any of the two above, then you have no option but to give "Wrong Answer" as an answer!

    The Input

    The input will consist of an arbitrary number of input sets. Each input set begins with a positive integer n < 100, alone in a line, which describes the number of lines of the standard solution. The next n  lines contain the standard solution. Then there is a positive integer m < 100, alone in a line, which describes the number of lines of the team output. The next m lines contain the team output. The input is terminated by a value of n = 0, and should not be processed. No line will have more than 120 characters.

    The Output

    For each set you should output one of the following lines:

    Run #x: Accepted
    Run #x: Presentation Error
    Run #x: Wrong Answer
    

    Where x stands for the number of the input set (starting from 1).

    Sample Input

    2
    The answer is: 10
    The answer is: 5
    2
    The answer is: 10
    The answer is: 5
    2
    The answer is: 10
    The answer is: 5
    2
    The answer is: 10
    The answer is: 15
    2
    The answer is: 10
    The answer is:  5
    2
    The answer is: 10
    The answer is: 5
    3
    Input Set #1: YES
    Input Set #2: NO
    Input Set #3: NO
    3
    Input Set #0: YES
    Input Set #1: NO
    Input Set #2: NO
    1
    1 0 1 0
    1
    1010
    1
    The judges are mean!
    1
    The judges are good!
    0
    

    Sample Output

    Run #1: Accepted
    Run #2: Wrong Answer
    Run #3: Presentation Error
    Run #4: Wrong Answer
    Run #5: Presentation Error
    Run #6: Presentation Error
    

    源代码:

    #include<iostream>

    #include<string>

    #include<cstring>

    #include<cstdio>

    using namespace std;

     

    int n,m;

    string str1[100],str2[100];

    char ch1[10001],ch2[10001];

    bool strNumCmp()

    {

        int i,j,k;

        j=0;

        memset(ch1,0,10001);

        memset(ch2,0,10001);

        for(i=0;i<n;++i)

        {

            for(k=0;k<str1[i].size();++k)

            {

                if(str1[i][k]>='0' && str1[i][k]<='9')

                    ch1[j++]=str1[i][k];

            }

        }

        ch1[j]='\0';

        j=0; 

        for(i=0;i<m;++i)

        {

            for(k=0;k<str2[i].size();++k)

            {

                if(str2[i][k]>='0' && str2[i][k]<='9')

                    ch2[j++]=str2[i][k];

            }

        }

        ch2[j]='\0';

        if(strcmp(ch1,ch2)==0) return true;

        else return false;                  

    }

    int main()

    {

        int i,num;

        num=1;

        while(1)

        {

            bool pflag,wflag;

            cin>>n;

            getchar();

            if(n==0) break;

            for(i=0;i<n;++i)

                getline(cin,str1[i]);

            cin>>m;

            getchar();

            for(i=0;i<m;++i)

                getline(cin,str2[i]);

            pflag=wflag=false;

            if(n!=m){

                if(strNumCmp()) pflag=true;

                else wflag=true;         

            }

            else{

                for(i=0;i<n;++i)

                {

                    if(str1[i]!=str2[i]) break;

                }

                if(i!=n)

                {

                    if(strNumCmp()) pflag=true;

                    else wflag=true;

                }

            }

            if(wflag) cout<<"Run #"<<num++<<": Wrong Answer"<<endl;

            else if(pflag) cout<<"Run #"<<num++<<": Presentation Error"<<endl;

            else cout<<"Run #"<<num++<<": Accepted"<<endl;

        }

        return 0;

    }

     //原来提交一直错误,主要是因为没有清题,当格式不对时,要判断所有的数字字符的顺序是否正确(原来我是每行判断的)

    如:

    3

    11

    11

    11

    1

    111111

    答案应该是:Presentation Error

    还有就是当m!=n时,直接判断是否为Presentation Error就行了

    3

    11

    12

    13

    4

    11

    1

    2

    13

    答案应该是:Presentation Error

    而对于:

    3

    11

    12

    13

    4

    11

    12

    13

    14

    就应该是Wrong Answer

  • 相关阅读:
    E. 因数串
    三点共圆公式
    B-Suffix Array
    线段树求解连续区间问题
    E. Quantifier Question (拓扑排序求前驱和后继)
    CF1344B Monopole Magnets
    Multiset (权值线段树模版)
    459. 重复的子字符串 next数组
    6.21笔试小结
    canva学习笔记
  • 原文地址:https://www.cnblogs.com/redlight/p/2295945.html
Copyright © 2011-2022 走看看