鱼C论坛

 找回密码
 立即注册
查看: 1571|回复: 1

OJ评测

[复制链接]
发表于 2019-8-2 18:52:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用C++做一个OJ,可以判断格式错误、正确、答案错误、时间超限,选手程序已经编译为user.exe文件。代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<windows.h>
bool cmp(char answer[],char output[]) {
        int apos=strlen(answer)-1,opos=strlen(output)-1;
        while((answer[apos]=='\n'||answer[apos]==' ')&&apos!=0) apos--;
        while((output[opos]=='\n'||output[opos]==' ')&&opos!=0) opos--;
        while(apos!=0&&opos!=0) {
                while(answer[apos]==' '&&apos!=0) apos--;
                while(output[opos]==' '&&opos!=0) opos--;
                while(apos!=0&&opos!=0) {
                        if(answer[apos]=='\n'&&output[opos]=='\n') {apos--,opos--;break;}
                        if(!(answer[apos]!='\n'||output[opos]!='\n')) return 0;
                        if(answer[apos]!=output[opos]) return 0;
                        apos--,opos--;
                }
        }
        return !(apos^opos);
}
bool cmp2(char answer[],char output[]) {
        int apos=strlen(answer)-1,opos=strlen(output)-1;
        while(apos!=0&&opos!=0) {
                while((answer[apos]=='\n'||answer[apos]==' '||answer[apos]=='\t')&&apos!=0) apos--;
                while((output[opos]=='\n'||output[opos]==' '||output[opos]=='\t')&&opos!=0) opos--;
                if(answer[apos]!=output[opos]) return 0;
                apos--,opos--;
        }
        if(apos!=0) if(answer[apos-1]=='\n'||answer[apos-1]==' '||answer[apos-1]=='\t') apos--;
        if(opos!=0) if(output[opos-1]=='\n'||output[opos-1]==' '||output[opos-1]=='\t') opos--;
        while((answer[apos]=='\n'||answer[apos]==' '||answer[apos]=='\t')&&apos!=0) apos--;
        while((output[opos]=='\n'||output[opos]==' '||output[opos]=='\t')&&opos!=0) opos--;
        return !(apos^opos);
}
int digit(int num) {
        if(num==0) return 0;
        if(num<0) return digit(-num)+1;
        int cnt=0;
        while(num) num/=10,cnt++;
        return cnt;
}
DWORD WINAPI func(LPVOID lpParamter) {
        system("user<problem.in>problem.out");
}
int x=rand()%100,y=rand()%100;
int main() {
        srand(time(0));
        fclose(fopen("problem.out","w"));
        FILE* input=fopen("problem.in","w");
        fprintf(input,"%d %d",x,y);
        fclose(input);
        HANDLE ut=CreateThread(0,0,func,0,0,0);
        Sleep(1000);
        FILE* out=fopen("problem.out","r");
        fseek(out,0,2);
        size_t size=ftell(out);
        fseek(out,0,0);
        char *output=(char*)malloc(size);
        char *answer=(char*)malloc(digit(x)+digit(y)+2);
        fread(output,1,size,out);
        sprintf(answer,"%d",x+y);
        if(size==0) printf("TLE");
        else if(cmp(answer,output)) printf("AC");
        else if(cmp2(answer,output)) printf("PE");
        else printf("WA");
        TerminateThread(ut,0);
}
选手程序:
#include<stdio.h>
int a,b;
int main() {
        scanf("%d%d",&a,&b);
        printf("%d",a+b);
        while(1);
}
我的程序在输出TLE后就无法关闭了,为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-3 12:13:58 | 显示全部楼层
有人吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 01:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表