您的位置:首页 > 其它

HDU 1073:Online Judge

2017-10-14 18:02 337 查看
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1073

题目意思:

输入T,T组测试数据。

每组数据提供两个文件,每个文件以START开始,以END结束。

然后如果两个文件完全相等,输出Accepted

否则两个文件除去空格,换行符和tab键外完全相同,输出Presentation Error

否则输出 Wrong Answer

注意:

如果输入空串,记得保留换行符,

其次就是串之间有空格,不要用scanf读入,用gets

题目写的我好崩溃,写的代码也不知道错哪了一直Wa,改了好久AC了。

AC代码:

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <queue>
#include <algorithm>

#define INF 0x3f3f3f3f
using namespace std;

char correct[50000]; ///正确的文件
char submit[50000]; ///提交的文件
char str[50000]; ///接收一个个字符串
char c[50000]; ///存放除去空格,制表符,换行等符号的正确文件
char s[50000]; ///存放除去空格,制表符,换行等符号的提交文件。
int main()
{
int T;
scanf("%d",&T);
getchar(); ///注意吞掉换行
while(T--)
{
strcpy(correct,""); ///两个字符串初始化为空
strcmp(submit,"");
int len1 = 0; ///第一个文件的长度
while(gets(str))
{
int len = strlen(str);
if(len == 0) ///空串,则放入换行
correct[len1++] = '\n';
else
{
for(int i = len1; i < len1+len; i++)
{
correct[i] = str[i-len1];
}
len1 = len1 + len;
correct[len1] = '\n'; ///保存换行符
len1++;
}
if(strcmp(str,"END")==0) ///是END结束
break;
}
int len2 = 0; ///提交文件的长度
while(gets(str))
{
int len = strlen(str);
if(len == 0) ///空串加入换行即可
submit[len2++] = '\n';
else
{
for(int i = len2; i < len2+len; i++)
{
submit[i] = str[i-len2];
}
len2 = len2 + len;
submit[len2] = '\n'; ///保存换行符
len2++;
}
if(strcmp(str,"END") == 0)
break;
}

if(len1 == len2) ///长度相等
{
bool flag = true;
for(int i = 0; i < len1; i++)
{
if(correct[i] != submit[i])
{
flag = false;
break;
}
}
if(flag) ///两个字符串完全相等
printf("Accepted\n");
else ///否则去掉换行、制表符和空格再次比较
{
int j = 0;
for(int i = 0; i < len1; i++)
{
if(correct[i]==' ' || correct[i]=='\t' || correct[i]=='\n')
continue;
else
c[j++] = correct[i];
}
c[j] = '\n'; ///末尾加换行符
j = 0;
for(int i = 0; i < len2; i++)
{
if(submit[i]==' ' || submit[i]=='\t' || submit[i]=='\n')
continue;
else
s[j++] = submit[i];
}
s[j] = '\n';
if(strcmp(s,c)==0)
printf("Presentation Error\n");
else
printf("Wrong Answer\n");
}
}
else
{
int j = 0;
for(int i = 0; i < len1; i++)
{
if(correct[i]==' ' || correct[i]=='\t' || correct[i]=='\n')
continue;
else
c[j++] = correct[i];
}
c[j] = '\n';
j = 0;
for(int i = 0; i < len2; i++)
{
if(submit[i]==' ' || submit[i]=='\t' || submit[i]=='\n')
continue;
else
s[j++] = submit[i];
}
s[j] = '\n';
if(strcmp(s,c)==0)
printf("Presentation Error\n");
else
printf("Wrong Answer\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: