在线判题(字符串)
来源:互联网 发布:淘宝网店上货教程 编辑:程序博客网 时间:2024/04/30 05:07
Description
LittleTom开发了一个在线判题系统,判题系统需要把用户提交上来的代码编译成可执行文件,然后运行。而用户会提交什么样的代码是无法预知的,所以LittleTom做了充分的准备,比如阻止解题程序访问文件系统、阻止解题程序访问注册表、阻止解题程序修改系统设置、阻止解题程序关闭系统、阻止解题程序超限或非法使用内存、阻止解题程序的运行时间超过设定时间等。这些工作LitteTom都已完成。
还有一个待解决的问题是判断解题程序的正确性。判题系统需要把解题程序产生的输出文件和正确的输出文件进行比较,如果两个文件完全相同,则判题系统返回“Accepted”,否则,如果两个文件除了空白符(空格’ ‘, 制表符’\t’, 或 回车符’\n’)之外其余内容都相同,则判题系统返回“Presentation Error”,否则判题系统返回“Wrong Answer”。
给定两个文件,一个代表正确输出,一个代表用户的解题程序的输出,你的任务是计算判题系统应该返回什么信息。
Input
输入包含多组测试实例。第一行输入一个整数T表示测试实例的个数。然后是T组输入。每组输入有两部分:一个代表正确输出,一个代表用户的解题程序的输出。都以“START”开始,以“END”结束,在“START”和“END”之间的是需要判断的数据部分。
Output
对于每一个测试实例,有一行输出,输出判题系统应该返回的结果:Accepted、Presentation Error或Wrong Answer。
Sample Input
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
Sample Output
Presentation Error
Accepted
Wrong Answer
Presentation Error
其实这个提的思路很简单 : 先把正确答案和提交的答案分别用字符串存起来,然后先判断这两个字符串是否完全相等,如果不完全相等的话,在对这两个字符串进行去空白字符处理(包括 : 空格,换行符,水平制表符),然后再判断经过处理之后的两个新的字符串是否相等,最后根据上面的几次判断的结果输出对应的结果。
大家看过上面的解题思路之后会觉得这道题挺简单的,但是在第一步存字符串的过程中可能会出现意想不到的bug,这里有两种存储的方法:第一种 是用二维字符串数组,第二种是 用 字符串连接函数存储到一个字符串当中; 显然第二种回事比较简单的,但是这里有一个小细节一定要处理好,这个细节就是 : 在存储字符串的时候,如果有一行只输入了一个 回车,那么被存储的那个字符串是 无法存储这个 换行符的,无论是 scanf 还是 gets 都不可以,(当然也许有的朋友用的输入语句比较厉害),那么这种情况 你要单独 把这个 换行符 连接到 整个字符串的后面,否则会发生 本来应该是 Presentation Error 的 就变成 Accepted 了 有的 oj 就会 给你 提示 该 错误情况!
代码如下 ,大家可以参考一下,哪里有错误了或者有所不足 希望大家多多指教!
/************************************************************** Problem: 1164(ACM.zzuli.edu.cn) User: LSC Language: C++ Result: Accepted Time:0 ms Memory:892 kb****************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 10000int F(char ch)// 判断是否为 空格 换行符 水平制表符{ if(ch == ' ' || ch == '\n' || ch == '\t') return 1; else return 0;}int injuge(char * ans, char * test)// 判断 函数, 1 : Accepted 2 : Presentation Error 3 : Wrong Answer{ if(strcmp(ans, test) == 0) return 1; char s1[N] = {0}, s2[N] = {0}; int i, k; for(i = 0, k = 0; ans[i] != '\0'; i++) if(!F(ans[i])) s1[k++] = ans[i]; for(i = 0, k = 0; test[i] != '\0'; i++) if(!F(test[i])) s2[k++] = test[i]; if(strcmp(s1, s2) == 0) return 2; else return 3;}void input(char * str)// 输入函数{ while(1) { char temp[N] = {0}; gets(temp); if(strcmp(temp, "START") == 0) continue; if(strcmp(temp, "END") == 0) break; if(temp[0] == 0) strcat(str, "\n");// 如果不判断为空的情况加上一个换行符的话,有可能会把presentation 变成 Accept(错误点) else strcat(str, temp); }}int main(){ int t; scanf("%d", &t); getchar(); while(t--) { char ans[N];// correct answer char test[N];// input answer memset(ans, 0, sizeof(ans));// 对字符串数组进行初始化(新学的) memset(test, 0, sizeof(test)); input(ans); input(test); int num = injuge(ans, test); if(num == 1) printf("Accepted\n"); else if(num == 2) printf("Presentation Error\n"); else printf("Wrong Answer\n"); } return 0;}
- 在线判题(字符串)
- 1164: 在线判题(字符串)
- 1164: 在线判题(字符串)
- 在线判题系统
- 字符串判等(奇葩水题)
- OJ在线判题注意事项(C++版)
- 在线判题系统hustoj的搭建
- 基于java的ACM online judge(OJ)在线判题系统实现
- C# 字符串比较(判等)优化
- HDU 2072 字符串处理(判重)
- 字符串的判空
- Java字符串判空
- 字符串判空
- 字符串判等
- 字符串判等
- 字符串判等
- 字符串 判空
- 汇编-字符串判回文
- 缤果盒子关闭上海首批无人店 谷歌Intel研发手机AI芯片
- 从乔布斯到林志颖 每个科技公司都住着一个“时尚大魔头”
- MYSQL双机热备
- 全局内存分配器:tcmalloc_sys_alloc
- 用PS制作简单婚纱海报
- 在线判题(字符串)
- spring来进行正式、测试环境无缝式切换
- 如何搭建一个独立博客——简明Github Pages与Hexo教程
- cut命令
- Codeforces 879C Short Program【思维】
- 647. Palindromic Substrings (DP)
- @Transactional(rollbackFor=Exception.class)的使用
- Error parsing HTTP request header
- 杨晖菱形