# polygon出題流程 1. statement,選english,以下是配分的範例 ```latex \begin{center} \begin{tabular}{ | c | c | c | } \hline \bf{子題} & \bf{限制} & \bf{分數} \\ \hline $1$ &原題 & $100$ \\ \hline \end{tabular} \end{center} ``` 2. checker一般選std::wcmp.cpp,以下是special judge ```cpp= #include <bits/stdc++.h> #include "testlib.h" using namespace std; int done[1000010], pos[1000010]; int main(int argc, char* argv[]) { registerTestlibCmd(argc, argv); int n=inf.readInt(1, 1000000, "n"); int m=inf.readInt(1, 1000000, "m"); int yy=ans.readInt(-1, n, "yy"); if(yy==-1){ if(ouf.readInt(-1, n, "output num")==-1) quitf(_wa, "wrong answer"); else quitf(_ok, "correct"); } for(int i=0;i<n;++i){ int out=ouf.readInt(1, n, "output num"); if(done[out]) quitf(_wa, "duplicate number"); done[out]=1; pos[out]=i; } for(int i=0;i<m;++i){ int a=inf.readInt(1, n, "a"); int b=inf.readInt(1, n, "b"); if(abs(pos[a]-pos[b])!=1) quitf(_wa, "condition not satisfied"); } quitf(_ok, "correct"); } ``` 3. validator.cpp * 弄validator test * readInt()裡"n"不能用'' * readInt()不能一個整數一個浮點數(ex: readInt(0, 1e9)) ```cpp= #include <bits/stdc++.h> #include "testlib.h" using namespace std; int main(int argc, char* argv[]) { registerValidation(argc, argv); int n = inf.readInt(1, 1000000, "n"); inf.readSpace(); inf.readInt(0, 1000000, "k"); inf.readEoln(); for(int i=0;i<n;++i){ inf.readInt(0, 1000000000, "a"); inf.readSpace(); inf.readInt(-1000000000, 1000000000, "a"); inf.readEoln(); } inf.readEof(); } ``` 4. 寫solution 5. 寫generator * 新增到files裡的source files(new file或add files並在本機寫) * 測資基本的數值如n, m, k這種直接用參數(之後在那邊script直接指定) * 如果有些子題有特別的條件,如"保證xxx不出現",直接寫另一個generator程式。 * [how to generate connected graph](/FQXAjH8xS8-B64OX9S4Mew) * 以下是範例 ```cpp= #include "testlib.h" #include <bits/stdc++.h> using namespace std; int main(int argc, char* argv[]){ registerGen(argc, argv, 1); int n = atoi(argv[1]); int k = atoi(argv[2]); cout<<n<<" "<<k<<"\n"; vector<int> save; for(int i=0;i<n;++i){ int same=rnd.next(0, 1); if(same && !save.empty()){ cout<<save[rnd.next(0, (int)save.size()-1)]<<" "<<rnd.next((int)-1e9, (int)1e9)<<"\n"; } else{ save.push_back(rnd.next(0, (int)1e9)); cout<<save.back()<<" "<<rnd.next((int)-1e9, (int)1e9)<<"\n"; } } } ``` 6. 到tests 7. 如果有子題勾選enable points和enable groups 8. 測資 * 小測資直接按add tests手輸(或generator指定n就好) * generator打在script,ex:```standard_gen 20 23 3 > 1``` * 同樣的指令可以打```gen 100 > {1-3}```,代表gen 100填在1-3的測資 (目前所知是爛的,work around是在指令後面隨便加一個數,反正不用到不會怎樣) * 最後save script 9. 指定子題分數,可以用右邊的勾選一次修改很多筆(操作會出現在右下角) * group就從1開始數 * 每個group下面的points policy選COMPLETE_GROUP 10. 到preview test,debug generator跟validator 11. 按Verification 12. 到manage access,add users,打codeforces,會自動補全,要把權限給codeforces 13. 到右下角commit changes 14. 到packages,按create package的standard 15. 複製右側欄位的一個連結 16. 到codeforces本站,到gym的右下按create mashup contest,並把剛剛的連結貼上去(之後也可以再加),最後複製mashup連結最後面那一串號碼 17. 到group按add contest to group,把剛剛複製的號碼貼上去 18. 到contest裡的edit,contest format選IOI(才有子題) 19. done