1164: 在线判题(字符串)

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 = 3END
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

HINT

Source

先上ac代码,分别用了数组和指针,指针正在练习,有些粗糙。。。~~~~(>_<)~~~~
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N 1005
int Compare(char *a,char *b);
void input(char *str);
void Del(char *str);


int main()
{
    int T;
    char *a,*b;
    int m=0;
    scanf("%d",&T);
    while(T--)
    {
        a=(char*)(malloc(N*sizeof(char)));
        b=(char*)(malloc(N*sizeof(char)));
        memset(a,0,N*sizeof(char));
        memset(b,0,N*sizeof(char));

        input(a);
        input(b);
        m=Compare(a,b);
        if(m == 1)
            printf("Accepted\n");
        else if(m == 2)
            printf("Presentation Error\n");
        else
            printf("Wrong Answer\n");

        free(a);
        free(b);
    }
    return 0;
}
int Compare(char *a,char *b)
{
    if(strcmp(a,b)==0)
        return 1;
    Del(a);
    Del(b);
    if(strcmp(a,b)==0)
        return 2;
    return 3;

}
void input(char *str)
{
    char *str1;
    str1=(char*)malloc(sizeof(char)*N);
    memset(str1,0,N);
    while(gets(str1),strcmp(str1,"START"));
    while(gets(str1),strcmp(str1,"END"))
    {
        if(*str1==0)
            strcat(str,"\n");
        else
            strcat(str,str1);
    }
}
void Del(char *str)
{
    char *s;
    s=(char*)malloc(sizeof(char)*N);
    memset(s,0,N);
    int i=0,j=0;
    for(i=0; *(str+i)!='\0'; i++)
    {
        if(*(str+i)!=' '&&*(str+i)!='\t'&&*(str+i)!='\n')
        {
            *(s+j)=*(str+i);
            j++;
        }



    }
    *(s+j)='\n';
    strcpy(str,s);
}

#include<stdio.h>
#include<string.h>
#define N 200001
void del(char ch[]);
int  bijiao(char a[],char b[]);
void input(char ch[])
{
    char str[N]= {0};
    while(gets(str),strcmp(str,"START"));
    while(gets(str),strcmp(str,"END"))
    {
        if(str[0]==0)
            strcat(ch,"\n");
        else
            strcat(ch,str);
    }
 
}
int main()
{
    int T;
    char a[N],b[N];
    int m;
    scanf("%d",&T);
    while(T--)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        input(a);
        input(b);
        m=bijiao(a,b);
        if(m == 1)
            printf("Accepted\n");
        else if(m == 2)
            printf("Presentation Error\n");
        else
            printf("Wrong Answer\n");
 
    }
    return 0;
 
}
void del(char ch[])
{
    int i,j;
    j=0;
    char s[N]={0};
    for(i=0; ch[i]!='\0'; i++)
    {
        if(ch[i]!=' '&&ch[i]!='\n'&&ch[i]!='\t')
            s[j++]=ch[i];
 
    }
    s[j+1]='\n';
    strcpy(ch,s);
 
}
int  bijiao(char a[],char b[])
{
    if(strcmp(a,b)==0)
        return 1;
    del(a);
    del(b);
    if(strcmp(a,b)==0)
        return 2;
    return 3;
}

代码已经有了 写点心得:

1.memset的运用,我刚开始用的是
memset(a,0,sizeof(a));

这样肯定就不对了,a只是指针,类型不同,字节也是不同;

2.用指针代替数组,一定不要忘了申请内存!!!

(刚开始试着用指针,问题有点幼稚。。。(*^__^*) 嘻嘻……)


  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值