在线判题(字符串)

news/2024/6/3 20:04:02 标签: 字符串

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 10000


int 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;
}


http://www.niftyadmin.cn/n/1686828.html

相关文章

R语言基础

> ls() character(0) > n <- 5 > ls() [1] "n" > x <- "acgt" > ls() ## 查看内存中所有变量名 [1] "n" "x" > str(n) ## 查看数据结构 num 5 > str(x) chr "acgt" > ls.str() ## 查看…

【tensorflow】加性高斯噪声AutoEncoder

来源于TensorFlow实战, 黄文坚, 唐源 #codingutf8 import numpy as np import sklearn.preprocessing as prep import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_datadef xavier_init(fan_in, fan_out, constant 1): # 泽威尔初始化low -con…

字符串函数全集

C语言字符串函数大全 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例:#include <stdio.h> #include <string.h>int main(void) {char string[10];char *str1 "abcdefghi";stpcpy(string, str1…

东东的女朋友(二)(简单解法)

Description 我们已经知道了&#xff0c;东东有很多的女朋友。每个女朋友都要东东陪她们&#xff0c;但是现在东东的女朋们每天也都需要上课&#xff0c;所以不可能一整天都有时间。现在的问题是&#xff0c;给出东东女朋友每一天的空闲时间&#xff0c;问东东最少用多少天可以…

【tensorflow】Cifar10卷积神经网络实时训练过程

执行环境&#xff0c;可能出现 AttributeError: module tensorflow.python.ops.image_ops has no attribute per_image_whitening 需要将cifar10_input.py 的182行改为per_image_whitening 改为 per_image_standardization cifar10_input.py 和cifar10.py 下载地址 #codingut…

扩展欧几里德求解ax + by = c 的 最小正整数解 ( x, y)

大概思路 &#xff1a; 第一步 &#xff1a; 给出方程 ax by c 。 第二步 &#xff1a; 算出 辗转相除法 gcd(a, b) 。 第三步 &#xff1a; 运用 扩展欧几里德 ex_gcd&#xff08;a, b&#xff09;-》 ax by gcd(a,b) 的 一组解&#xff08;x, y&#xff09; 。 第三步…

快速幂 素数筛法

// 素数表 N static int visited[N];memset(visited, 0, sizeof(visited));int m sqrt(N 0.5);for(int i 2; i < m; i)if(!visited[i])for(int j i*i; j < N; j i)visited[j] 1; // 快速幂 -> a^b LL quick_pow(LL a, LL b) {LL ret 1;LL temp a;while(b)…

C++ 科学计数法和精度问题

C 科学计数法和精度问题 &#xff08;来源于C入门经典第三版&#xff09; // Program 2.8 Experimenting with floating point output #include <iostream> // fixed scientific #include <iomanip> // setprecision()using std::setprecision; using std::fixed;…