所谓“工欲善其事,必先利其器”。要想打TC,还必须得把准备工作做好。话说TC比CF复杂多了,如果说CF还有点正常OJ的样子,那TC真是颠覆了我的认知。作为一个小白,借鉴了网上诸多教程后,自己来整理一下。
1.需要准备的软件
Java Runtime Environment(JRE) 配置Java环境;
Competition Arena TC的竞技场,比赛就在上面做;
CodeProcessor TZTester FileEdit 三个很有用的插件,TC官网可以下载。
上述的软件和插件我都放在BaiduYun上,以供参考。
2.安装具体流程
1)安装JRE(当然也可以是JDK),配置本机的Java环境;
2)安装完毕后,运行ContestAppletProd.jnlp,会出现登陆界面;
3)在登录界面输入用户名、密码,回车登录,进入主界面;
4)选择Options->Editor(黄色选框),会弹出Editor Preferences窗口;
5)单击Add,配置插件,Name填CodeProcessor(其实无所谓),EntryPoint填codeprocessor.EntryPoint,ClassPath用Browse或输入的方式把三个插件的路径都填上,用';'隔开,可以使用绝对路径或相对路径(同一文件夹下)。
6)单击保存后,看到窗口中除Standard外多了刚刚添加的一项。选中,单击Configure,Editor EntryPoint填fileedit.EntryPoint,Processor Class填tangentz.TZTester;
7)填完以后,看旁边两个按钮,点Verify可以验证输入的合法性,接着点Configure,又弹出一个窗口,在General选项卡中勾选Write the problem description using HTML,并把下面后缀名改成html,这样题目的描述就可以像网页一样查看,而不必一直看着那小窗口;然后切换到Code Template选项卡,将自己的模板贴到里面,到时候插件会自动生成代码模板并插入题目的测试样例,而不用自己一个个去扒下来。代码仓库里存有一份比较好的模板可供参考。
8)将所有的设置保存,再去主界面Options->Set User Preferences中设置语言,就可以去做题目练练手啦!
3.练习和比赛
1)练习
主界面中点击Practice Rooms,选择一场比赛进入,Loading过后就进入到room里面。聊天功能什么的不多说,就说怎么做题目。界面中部有一个下拉选框Select One,以SRM为例,展开后会出现三个选项250,500,1000,分别代表难度依次增大的三道题目。选择一道题目进入,会弹出一个窗口。将Choose your editor选框中Standard切换为CodeProcessor(插件名称)。完成上述工作后,打开软件所在的文件夹,可以看到出现两个新的文件,一个以html结尾,是网页格式的题目描述;一个以cpp等结尾,是生成的代码模板。打开代码,直接在题目要求的接口函数中打自己的代码即可。编辑完成后,回到Arena题目界面,点Compile编译,点Test测试单个样例,点Batch Test测试所有样例,点Submit提交,显示的分数是根据提交时间距打开题目的时间计算的,不是最终成绩,另外注意除第一次外每次提交都会有扣分。如果是练习,可以回到room点Practice Options->Run System Test,可以测试所有题目(最终数据),绿色通过,红色不通过。做完题目点Lobbies->Admin Lobby Room返回主界面。
2)比赛
主界面点击Active Contests,先注册,在比赛开始后Enter进入,做题过程与上述相同。SRM的Coding Phase有75分钟,intermission5分钟,然后是15分钟的Challenge Phase,这时就尽情cha别人代码吧。cha成功得50分,被cha掉的代码0分;cha失败倒扣25分。接着是System Test,时间比较长,完成后就可以查看结果了。
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
$BEGINCUT$ $PROBLEMDESC$ $ENDCUT$ #include <set> #include <map> #include <queue> #include <ctime> #include <cmath> #include <cstdio> #include <vector> #include <string> #include <cctype> #include <bitset> #include <cstring> #include <cstdlib> #include <utility> #include <sstream> #include <iostream> #include <algorithm> #include <functional> #define lowbit(x) (x)&(-x) #define REP(i,a,b) for(int i=(a);i<=(b);i++) #define PER(i,a,b) for(int i=(a);i>=(b);i--) #define RVC(i,S) for(int i=0;i<(S).size();i++) #define RAL(i,u) for(int i=fr[u];i!=-1;i=e[i].next) using namespace std; typedef long long LL; typedef pair<int,int> pii; template<class T> inline void read(T& num) { bool start=false,neg=false; char c; num=0; while((c=getchar())!=EOF) { if(c=='-') start=neg=true; else if(c>='0' && c<='9') { start=true; num=num*10+c-'0'; } else if(start) break; } if(neg) num=-num; } /*============ Header Template ============*/ class $CLASSNAME$ { public: $RC$ $METHODNAME$($METHODPARMS$) { //$CARETPOSITION$ } $TESTCODE$ }; // BEGIN CUT HERE int main() { $CLASSNAME$ ___test; ___test.run_test(-1); system("pause"); } // END CUT HERE |