🌟苏卡不列斯基 rentenglong200
关注数: 12 粉丝数: 17 发帖数: 287 关注贴吧数: 16
如何正确地写一个Lemon的Special Judge并正确地使用 如何写一个Lemon的Special Judge 在OI竞赛自测中,许多教练们或者是大触们(模模模模模)都会自己出题。Lemon评测系统因为它的多线程评测和简洁,并且还能自动添加试题的功能而导致它实在是没的说,就是好用。 但是嘛,很多人不会写SPJ。不会写SPJ。不会写SPJ。(大触会的话轻喷哈) 然而教程也很少。。。这真的是坑啊,作者博客居然也是无效URL,抓狂。。。 所以这个教程就是为了让大家了解如何使用正确的姿势来写一个Lemon的SPJ并且使用正确的方式使用它。 ·写法 首先来讲是怎么写。 在Lemon的评测系统中,与cena类似,都是用main函数中的文件名数组读入。但是具体的含义好像是不大一样。 intmain(int argc,char *argv[]) { /* argv[1]:输入文件 argv[2]:选手输出文件 argv[3]:标准输出文件 argv[4]:单个测试点分值 argv[5]:输出最终得分的文件 argv[6]:输出错误报告的文件 */ } 主函数是这么用的。 然后下面贴出整个程序的.cpp代码。Java大神请无视! 【Lemon_Special_Judge.cpp】参上 #include<fstream> #include<iostream> #include<string> #include<cstdlib> #include<cstdio> usingnamespace std; ofstreamfscore,freport; ifstreamfin,fout,fstd; intthis_point; stringmainception; stringacep; voidJudge() { getline(fout,mainception); getline(fstd,acep); if(acep!=mainception) { freport<<"人名都错了,你怎么算的?\n正确答案是“"<<acep<<"”\n而你却输出了“"<<mainception<<"”"; fscore<<0<<endl; } else { getline(fout,mainception); getline(fstd,acep); if(acep!=mainception) { freport<<"名字对了,但是计算出了错误。\n正确答案是“"<<acep<<"”\n而你却输出了“"<<mainception<<"”\n"<<endl<<"看在你对了一点的份上就给你1分好了。"; fscore<<1<<endl; } else { fscore<<this_point<<endl; freport<<"完全正确,无可挑剔。"<<endl; } } } intmain(int argc,char *argv[]) { /* argv[1]:输入文件 argv[2]:选手输出文件 argv[3]:标准输出文件 argv[4]:单个测试点分值 argv[5]:输出最终得分的文件 argv[6]:输出错误报告的文件 */ fin.open(argv[1]); fout.open(argv[2]); fstd.open(argv[3]); fscore.open(argv[5]); freport.open(argv[6]); this_point=atoi(argv[4]); Judge(); fin.close(); fout.close(); fstd.close(); fscore.close(); freport.close(); return 0; } 标准C++的文件操作,C大触轻喷哈! 在程序中,通过调用“Judge”函数来进行得分判定,并将信息和得分输出。 当然,如果有大触想要自己写的话,请一定一定注意下面这个问题: ofstreamfscore,freport; ifstream fin,fout,fstd; 一定要注意啊!!!千万不能直接使用fstream定义这些变量!!!一定要区分!!!!!!我在这个坑里爬了5天才滚出来啊…… ·使用方法 然后就是怎么使用的问题。 cena至少在自定义校验器选项中还告诉你选择校验器的地址。但是。。。这什么啊!什么啊!什么啊!什么啊!什么啊!什么啊!什么啊! 就一个白色的框到底该填什么!!!!!! 后来我才发现,那个地方是这样的。 首先,把你的cpp打包成exe。 然后把它放在你的题目的目录下面。比方说,我的叫“mvp”,评测exe的名字叫“Lemon_Special_Judge.exe”。 然后你在白框里输入:“mvp\Lemon_Special_Judge.exe” 然后再去评测。你会发现,成了!如果答案部分正确的话。。。就输出自定义的信息。
1 下一页