2022.1.29#HDU-1073 Online Judge

2022-01-29

今天依旧荒废时光到下午...慢慢调整吧

题目

‎问题描述‎ ‎伊格内修斯正在建立一个在线法官,现在他已经解决了除法官系统之外的所有问题。系统必须从正确的输出文件和用户的结果文件中读取数据,然后系统比较这两个文件。如果两个文件绝对相同,则法官系统返回"已接受",否则如果两个文件之间的唯一区别是空格(' '),tabs('\t')或enter('\n'),则法官系统应返回"演示错误",否则系统将返回"错误答案"。‎
‎ ‎
‎给定正确输出文件的数据和用户结果文件的数据,您的任务是确定裁判系统将返回哪个结果。‎

‎输入‎

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

‎输出‎

‎对于每个测试用例,应输出法官系统应返回的结果。‎

‎示例输入‎

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

示例输出:

Presentation Error
Presentation Error
Wrong Answer
Presentation Error

 

思路:每组应当比较两次:1.去掉格式后是否一致?2.直接比较是否一致?

故每组有四个字符串,比较两次得到结果。

strcmp和strncmp,以及string的a1.compare(b1)。

 

代码:

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 int main(void)
 5 {
 6     int T;
 7     int tta,ttb;
 8     string tmp;
 9     string a1, b1;
10     char a2[20], b2[20];
11     cin >> T;
12     while (T--)
13     {
14         while (1)
15         {
16             getline(cin, tmp);
17             if (tmp == "START" || tmp.size() == 0)
18                 continue;
19             else if (tmp == "END")
20                 break;
21             else
22             {
23                 a1 = tmp;
24                 tmp.copy(a2, tmp.size());
25                 tta = tmp.size();
26                 for (int i = 0;i < tta;i++)
27                 {
28                     if (a2[i] == ' ' || a2[i] == '\t' || a2[i] == '\n')
29                     {
30                         tta--;
31                         for (int j = i;j < tta;j++)
32                             a2[j] = a2[j + 1];
33                     }
34                 }
35             }
36         }
37         cout << a1 << endl;
38         for (int i = 0;i < tta;i++)
39             cout << a2[i];
40         cout << endl;
41 
42         while (1)
43         {
44             getline(cin, tmp);
45             if (tmp == "START" || tmp.size() == 0)
46                 continue;
47             else if (tmp == "END")
48                 break;
49             else
50             {
51                 b1 = tmp;
52                 tmp.copy(b2, tmp.size());
53                 ttb = tmp.size();
54                 for (int i = 0;i < ttb;i++)
55                 {
56                     if (b2[i] == ' ' || b2[i] == '\t' || b2[i] == '\n')
57                     {
58                         ttb--;
59                         for (int j = i;j < ttb;j++)
60                             b2[j] = b2[j + 1];
61                     }
62                 }
63             }
64         }
65         cout << b1 << endl;
66         for (int i = 0;i < ttb;i++)
67             cout << b2[i];
68         cout << endl;
69 
70         if (tta != ttb || strncmp(a2, b2, tta) != 0)
71             cout << "Wrong Answer" << endl;
72         else
73         {
74             if (a1.compare(a2) == 0)
75                 cout << "Accepted" << endl;
76             else
77                 cout << "Presentation Error" << endl;
78         }
79     }
80     return 0;
81 }

 

(比较懒惰没搞个函数出来封装了,重复的过程直接cv了哈哈哈)

 

上一篇:HDU 2032 杨辉三角


下一篇:面试题32 - I. 从上到下打印二叉树