|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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后就无法关闭了,为什么?
|
|