PC/UVA 110305/10188 Automated Judge Script

昨天晚上做了两个多小时一直WA,可能是题目故意设的陷阱吧,读题时就感觉好多信息没给出来。这种情况的结果应该输出什么,可能定性思维吧,就理解错了。题意很简单就是一个自动评判系统,根据标准进行判断,并返回结果,AC很好判断,就是PE和WA,题目说的是如果数字字符和他们出现的顺序完全一致,且至少有一个非数字字符不一致,输出PE其它情况都输出WA,但是理解的是如果标准答案和选手给的结果组数不一致时直接属于其它情况,直接输出结束。否则判是不是完全一致是的话,输出AC,其它情况判数字和出现的顺序是否完全一致,是的话输出PE,其它都输出WA。结果一直WA。         今早看了网上写的又和思思交流了下,看来是我理解过了。主要在WA的判断,其实只有在数字和顺序不一致时才输出WA,其它情况只要不是AC都是PE这和刚开始的理解是完全错的。

例如:

1

150

2

1abc

50

结果应该为PE,但刚开始的想法直接输出WA了。 题意....................

View Code
 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <cstdlib>
5 #include <cctype>
6 using namespace std;
7
8 char str1[110][122];
9 char str2[110][122];
10 char digit1[12200];
11 char digit2[12200];
12 int n, m;
13
14 int min(int a, int b)
15 {
16 return a < b ? a : b;
17 }
18
19 void get_digit() { //把其中的数字全部按顺序存储在一个数组里
20 memset(digit1, 0, sizeof(digit1));
21 memset(digit2, 0, sizeof(digit2));
22 int i, j;
23 int len;
24 int c;
25 c = 0;
26 for (i = 0; i < n; i++) {
27 len = strlen(str1[i]);
28 for (j = 0; j < len; j++) if (isdigit(str1[i][j])) {
29 digit1[c++] = str1[i][j];
30 }
31 }
32 digit1[c]='/0';
33
34 c = 0;
35 for (i = 0; i < m; i++) {
36 len = strlen(str2[i]);
37 for (j = 0; j < len; j++) if (isdigit(str2[i][j])) {
38 digit2[c++] = str2[i][j];
39 }
40 }
41 digit2[c] ='/0';
42 }
43
44 int get_result() {
45 int i, flag = 0;//默认是AC

46 if (n != m) {
47 flag = 2; //组数不一样时默认是PE
    }
49 int Min = min(n, m);
50 for (i = 0; i < Min; i++)
51 {
52 if (strcmp(str1[i], str2[i]) != 0 || flag == 2) { //是PE或者两串不一样是要判因为可能是WA
53 flag = 2;
54 get_digit(); //把其中的数字全部按顺序存储在一个数组里
55 if (strcmp(digit1, digit2) != 0) {
56 flag = 1;
57 }
58 break;
59 }
60 }
61 return flag;
62 }
63
64 int main()
65 {
66 int count = 0;
67 while (scanf("%d", &n) != EOF) {
68 getchar();
69 if (n == 0) break;
70 int i;
71 memset(str1, 0, sizeof(str1));
72 memset(str2, 0, sizeof(str2));
73 for (i = 0; i < n; i++) {
74 //gets(str1[i]); //两种输入方法都行
75 cin.getline(str1[i],122);
76 }
77 scanf("%d", &m);
78 getchar();
79 for (i = 0; i < m; i++) {
80 //gets(str2[i]);
81 cin.getline(str2[i],122);
82 }
83 int result = get_result();
84 if (result == 1) {
85 cout << "Run #" << ++count << ": Wrong Answer" << endl;
86 } else if (result == 2) {
87 cout << "Run #" << ++count << ": Presentation Error" << endl;
88 } else {
89 cout << "Run #" << ++count << ": Accepted" << endl;
90 }
91 }
92 return 0;
93 }

 

转载于:https://www.cnblogs.com/zhaoguanqin/archive/2012/02/29/2372857.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值