这个题出得很有意义。。自己写一个OJ系统,能让我们加深对ACM比赛规则的理解。

分析:

这道题需要解决的问题有2个:

1、数据输入问题。即如何才能以START串开始,END串结束。并把这两个字符串之间的内容储存起来(可能有有多行数据,可能有空格,换行)。解决的方法是,do..while循环:用gets获取每一行输入的字符串后,紧接着用getchar获取到下一次输入的前3个字符,如果这3个字符是E,N,D,则说明输入结束,退出循环,否则就把刚刚gets到的字符串用strcat函数跟上一次输入的串拼接起来。注意拼接之前要把用getchar获得的字符用ungetc函数放回到输入流中!!

2、WA,PE,AC的判断问题。解决方法是:先比较输入数据与标准答案是否完全相同,要同则AC。否则把标准答案和用户输入的数据中的 \t , \n , 和空格全部删除,再次进行比较。如果经过删除后两串相同,则结果为PE,反之为WA。

代码:

#include <stdio.h>
#include <string.h>
char input[5050];
char right[5050];
char temp[5050];
int is_end(char *temp,char *right)
{if(!strcmp(temp,"END"))return 1;char e = getchar();if(e == '\n')return 0;char n = getchar();if(n == '\n')return 0;char d = getchar();if(d == '\n')return 0;char enter = getchar();int res;if(e == 'E' && n == 'N' && d == 'D' && enter == '\n'){res = 1;strcat(right,temp);}else{res = 0;ungetc(enter,stdin);ungetc(d,stdin);ungetc(n,stdin);ungetc(e,stdin);}return res;
}
int OJ(char *right,char *input)
{if(!strcmp(right,input))return 1; /* AC */int is_del_r = del(right);int is_del_i = del(input);if(!strcmp(right,input)){if(is_del_i || is_del_r)return -1; /* PE */}elsereturn 0;}
int del(char *input)
{int len = strlen(input);int i,j;int is_del = 0;for(i = 0 ; input[i] != '\0' ; ++i){if(input[i] == ' ' || input[i] == '\t' || input[i] == '\n'){for(j = i ; j < len - 1 ; ++j)input[j] = input[j + 1];input[j] = '\0';is_del = 1;--i;}}return is_del;
}
int main(int argc, char *argv[])
{int N,i,j,t;scanf("%d",&N);for(t = 1 ; t <= N ; ++t){int time = 0,len;char c;memset(input,0,sizeof(input));memset(right,0,sizeof(right));/* the right data */scanf("%s",temp); /* START string */c = getchar();       do{len = strlen(temp);if(0 == time) /* first time */gets(temp);else{temp[len] = c;temp[len + 1] = '\0';strcat(right,temp);gets(temp);}c = '\n';++time;}while(is_end(temp,right) == 0);/* the input data */scanf("%s",temp); /* START string */time = 0;c = getchar();        do{len = strlen(temp);if(0 == time) /* first time */gets(temp);else{temp[len] = c;temp[len + 1] = '\0';strcat(input,temp);gets(temp);}c = '\n';++time;}while(is_end(temp,input) == 0);int res = OJ(right,input);switch(res){case 0:printf("Wrong Answer\n");break;case -1:printf("Presentation Error\n");break;case 1:printf("Accepted\n");break;}}return 0;
}

转载于:https://www.cnblogs.com/whongfei/archive/2012/10/31/5247023.html

【ACM】杭电1073:Online Judge相关推荐

  1. 5410 ACM 杭电 01+完全背包

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5410 虽然是英文题目:但还是很好理解的.明显的背包问题 思路:如果你能想到把题目拆分成小问题,就会简单许多 ...

  2. 最详细最简单:最大公因数求法、辗转相除法、更相减损法,入门ACM,杭电水题,算法递归,初级算法题一看就懂

    文章目录 前言 一.名称定义 1.最大公约数 2.辗转相除法 3.更相减损法 二.ACM杭电入门题 1.解题思路 三.解题参考代码(C语言,C++) 0.最优算法(C++) 1.辗转相除求解(C语言) ...

  3. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  4. 杭电ACM(HDUOJ)试题分类

    杭电ACM试题分类 第一篇 1001 这个就不用说了吧                      1002 简单的大数                            1003 DP经典问题,最 ...

  5. 杭电acm第2304题答案c语言,【转】杭电ACM试题分类

    注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 ...

  6. 杭电ACM题目类型整理

    版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...

  7. 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)

    赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong   Date   : 2015-09-17    HomePage : http://  E ...

  8. 【杭电ACM】1097 A hard puzzle

    [杭电ACM]1097  A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...

  9. 杭电ACM刷题(1):1002,A + B Problem II

    最近忙于考试复习,没有多少可供自己安排的时间,所以我利用复习之余的空闲时间去刷刷杭电acm的题目,也当对自己编程能力的锻炼吧. Problem Description I have a very si ...

最新文章

  1. 如何利用clion编译ros工程,并方便在clion中调试?
  2. php设置文件权限问题,关于.user.ini以及php访问上级文件权限问题
  3. 破解时的数据约束性和winhex操作失败
  4. 职高计算机专业可以考本科吗,职业高中和普通高中的区别 职业高中能考本科吗...
  5. Hibernate中Session的清理与清空
  6. Django 之多对多关系
  7. 剑指Offer04. 二维数组中的查找
  8. 用户参与度与活跃度的区别_用户参与度突然下降
  9. 数学入门题——《算法竞赛入门经典-训练指南》
  10. java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...
  11. js计算两个时间相差月份
  12. linux安全与优化
  13. spark数据倾斜解决之提高并行度
  14. 关于new FormData() 对象的用法
  15. 深入理解uwsgi和gunicorn网络模型
  16. java进阶案例下载_登录案例java实现 ---- Java进阶篇
  17. 一文搞懂URI与URL
  18. java 审计日志_审计日志的实现
  19. 在 uniapp 中使用阿里图标
  20. Linux Mint 21编译Android kernel,遇到 multiple definition of `yylloc‘ 的错误解决

热门文章

  1. 华人小哥用苹果音箱「隔空」测心律,论文登上Nature子刊
  2. 今年央视春晚的创意担当,给了这个1岁的拓荒牛机器人
  3. Nature最新封面:哺乳动物有「一键返老还童」按钮,复旦校友的这项研究恢复了老年小鼠视力...
  4. 姚班代有才人出:清华本科生用“最简单的形式”,大幅提高少样本学习性能...
  5. 7步搞定Python数据可视化,业界大牛出品教程,Jupyter、Colab都有在线版
  6. 四周第四次课 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 x
  7. 基本算法系列15天速成
  8. 电信运营商 IT 系统介绍
  9. javaScript实现归并排序
  10. idea 亮度 调整_WIN10 困扰多时的屏幕亮度 终于可以调节了-完美 -更新2018年2月28日...