HDU1073

来源:互联网 发布:淘宝有效评价 编辑:程序博客网 时间:2024/06/18 04:35

★★HDU1073 Online Judge

小明现在想做一个在线评判系统,他对于每个问题都有一个正确的输入文件和用户输入的文件。如果用户文件与正确文件完全一样的话,则输出"Accepted",如果两者之间只有空格(' '), 制表符('\t'), or 换行符('\n')的区别,则输出"Presentation Error"。否则输出"Wrong Answer"。

输入:第一行为T,表以下有T个实例。对于每个实例有两部分,先是正确的文件,后是用户的文件。他们都是以单独的一行"START"开始和以单独的一行"END"结束的。中间的每行都是文件内容。

文件最多5000个字符。

输出:输出在线评判系统的评判结果。

分析:直接用scanf一个一个字符的读入所有正确文件与用户文件的所有字符,并判断结尾。然后先依次判断正确文件与用户输入文件是否一样,否则判断是否格式不同,否则是wrong answer。

AC代码:

#include<cstdio>

#include<cstring>

using namespace std;

char str1[5000+100];//正确文件

char str2[5000+100];//用户文件

bool is_four(char c)//判断空格,制表符,换行符。

{

    if(c==''||c=='\t'||c=='\n')

        returntrue;

    returnfalse;

}

int main()

{

    int t;

   while(scanf("%d%*c",&t)==1&&t)//实例个数

    {

       while(t--)//每个实例

        {

            //读入正确文件

            charc;

           for(int i=0; i<6; i++) //读开头的start与换行符

            {

               c = getchar();

            }

            inti=0;

            while(1)//读正确文件+‘\n’+“END”+‘\n’

            {

               str1[i]=getchar();

               if(str1[i]=='\n'&&i>=4)

               {

                   if(str1[i-4]=='\n'&&str1[i-3]=='E'&&str1[i-2]=='N'&&str1[i-1]=='D')//判断结尾

                   {

                       break;

                   }

               }

               i++;

            }

            intlen1=i+1;//文件长度

            //读入用户文件

           for(int i=0; i<6; i++) //读开头的start与换行符

            {

                c = getchar();

            }

            i=0;

           while(1)//读用户文件+‘\n’+“END”+‘\n’

            {

 

               str2[i]=getchar();

               if(str2[i]=='\n'&&i>=4)

               {

                   if(str2[i-4]=='\n'&&str2[i-3]=='E'&&str2[i-2]=='N'&&str2[i-1]=='D')

                   {

                       break;

                   }

               }

               i++;

            }

            intlen2=i+1;

            boolaccepted=true;//两个文件完全相同

           if(len1!=len2)accepted=false;

           if(len1==len2)

            {

               for(int i=0;i<len1;i++)

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

                   {

                       accepted=false;

                       break;

                   }

            }

            boolP_E=true;//仅格式错误

           if(!accepted)

            {

               int i=0,j=0;

               while(1)

               {

                   while(i<len1&&is_four(str1[i]))i++;//找到下一个非‘ ’‘\t’‘\n’字符

                   while(j<len2&&is_four(str2[j]))j++;//找到下一个非‘ ’‘\t’‘\n’字符

                   if(i>=len1&&j>=len2)

                       break;

                   else if(i>=len1||j>=len2)

                   {

                       P_E=false;

                       break;

                   }

                   else if(str1[i]!=str2[j])

                   {

                       P_E=false;

                       break;

                   }

                   else//str1[i]==str2[j]

                   {

                       i++;

                       j++;

                   }

               }

            }

           if(accepted)printf("Accepted\n");

            elseif(P_E)printf("Presentation Error\n");

            elseprintf("Wrong Answer\n");

        }

    }

    return 0;

}

 


0 0