【教程】如何正確的寫一個Lemon/Cena的SPJ(special judge)


Special Judge:當正確的輸出結果不唯一的時候需要的自定義校驗器

首先有個框架

#include<fstream>
ifstream fin,fout,fstd
ofstream fscore,freport;
double Judge(){
    
}
int main(int argc,char *argv[]) {
    //put something to fstreams...
    
    //Judge&output report 
    
    //close files
    return 0
}

然后fstream的接口對於lemon和cena不同

For Lemon:

所有的都從argv[]里面讀入

argv[1]:輸入文件

argv[2]:選手輸出文件

argv[3]:標准輸出文件

argv[4]:單個測試點分值

argv[5]:輸出最終得分的文件

argv[6]:輸出錯誤報告的文件

然后lemon的spj就大概這樣寫

int main(int argc,char *argv[]){
    fin.open(argv[1]);
    fout.open(argv[2]);
    fstd.open(argv[3]);
    fscore.open(argv[5]);
    freport.open(argv[6]);
    
    int score=atoi(argv[4]);
    fscore<<score*Judge()<<endl;
    
    fin.close();
    fout.close();
    fstd.close();
    fscore.close();
    freport.close();
    return 0;
}

For Cena:

“score.log” 輸出最終得分

“report.log”輸出錯誤報告

#FILENAME”.in”輸入文件

#FILENAME”.out”選手輸出文件

argv[2]:標准輸出文件

argv[1]:單測試點分值

int main(int argc,char *argv[]){
    fscore.open("score.log");
    freport.open("report.log");
    fstd.open(argv[2]);
    fin.open("set.in");
    fout.open("set.out");
    
    int score=atoi(argv[1]);
    fscore<<score*Judge()<<endl;
    
    fin.close();
    fout.close();
    fstd.close();
    fscore.close();
    freport.close();
    return 0;
}

 

*若描述和代碼有不同,以代碼為主qwq

*我就會這兩個了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM