多解需要SPJ
入门:
题目:输出 Hello, World!,大小写不限。
比赛目录如下:
标准输入输出数据如下:
string1.in(空文件,里面没有任何内容)
string1.ans
Hello, World!
用户程序(string.cpp)如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
printf("HellO, World!");
return 0;
}
SPJ代码(chk.cpp)如下:
#include <bits/stdc++.h>
using namespace std;
int main(int argc,char *argv[]){
FILE * f_in=fopen(argv[1],"r");//标准输入
FILE * f_out=fopen(argv[2],"r");//用户输入
FILE * f_std=fopen(argv[3],"r");//标准输出
int score=atoi(argv[4]);//单个测试点分值
FILE * f_score=fopen(argv[5],"w");//得分文件
FILE * f_report=fopen(argv[6],"w");//报告文件
char s1[100],s2[100];
fscanf(f_out,"%s",s1);
fscanf(f_std,"%s",s2);
bool ok = true;
if (strlen(s1) != strlen(s2)) {
fprintf(f_report,"Output length differs.");
ok = false;
} else {
for (int i = 0; i < strlen(s1); i++) {
if (tolower(s1[i]) != tolower(s2[i])) {
fprintf(f_report,"%s%d%s%c%s%c%s","The ",i + 1,"-th character differs. Expected '",s2[i],"'; got '",s1[i],"'.");
ok = false;
}
}
}
if (ok) {
fprintf(f_report,"OK!");
}
fprintf(f_score,"%d",(ok ? score : 0));
fclose(f_in);
fclose(f_out);
fclose(f_std);
fclose(f_score);
fclose(f_report);
return 0;
}
未加SPJ,测评如下:
加SPJ(将chk.cpp编译后的chk.exe文件放于spj3\data\string\目录中,详见本文开始部分的比赛目录),测评如下:
Lemon LemonLime 中 SPJ Special Judge 使用的本质是什么?那么,我们就抛开Lemon LemonLime测评软件,进行研究。
编译string.cpp,生成string.exe,运行string.exe,生成string.out
编译chk.cpp,生成chk.exe,运行chk.exe
解释如下:
argv[1] 对应 string1.in
argv[2] 对应 string.out
argv[3] 对应 string1.ans
argv[4] 对应 100
argv[5] 对应 score.b
argv[6] 对应 report.b