競プロのテストケース作成方法
競技プログラミングでテストケースを作るためのテンプレートを置きます。
ランダムでのケース自動生成、自動でのファイル作成を前提にしています。
ファイル名はAtcoder形式です。
・Solve()...問題を解く処理をここに書きます。
・Form()...入力を生成する処理をここに書きます。
・ID(int num, string type)...テストケースのファイル名を設定する関数です。
このコードだと、デスクトップに in , out というフォルダを作るとうまく行きます。
ファイルの場所やsubtaskの番号などは適宜変えてください。
・SetOut , SetIN ... 入出力先のファイルの指定、作成をします。
sleep関数を置いているのは、時間に依存する乱数をテストケース生成に使う場合への対策です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include<iostream> #include<unistd.h> typedef long long ll; using namespace std; namespace solve{
};
void Solve(){ solve::main(); }; void Form(){ cout<< "in" <<endl; } string ID( int num,string type){ string fil= "/Users/ynymxiaolongbao/Desktop/" ; string sub= "/subtask1_" ; string Num=to_string(num); if (Num.size()==1)Num= "0" +Num; return fil+type+sub+Num+ ".txt" ; } void SetOut( int num,string type){ FILE *out= freopen (ID(num,type).c_str(), "w" ,stdout); } void SetIn( int num,string type){ FILE *in= freopen (ID(num,type).c_str(), "r" ,stdin); } int main(){ for ( int i=1;i<=20;i++){ srand((unsigned int)time(NULL)); sleep(1); SetOut(i, "in" ); Form(); SetIn(i, "in" ); SetOut(i, "out" ); Solve(); } return 0; } |