もくじ
TopCoderの導入
しめじたんの記事を読めば良い。 登録は20分位かかった。遅いほうかも。
ログインできたら左上のO(n)のアイコンをくりっく、ポップアップのlaunch Arena的なアイコンをくりっく。
なにやら(ContestAppletProd.jnlp)ダウンロードされるので、クイック起動に登録しておく。
C++の導入
僕はc++コンパイラすらなかったのでそこからスタート。
cygwinをインストールすればOKhttp://i-love-windows.blog.so-net.ne.jp/2010-02-01
ってISerならUbuntuですよね~
C++については、下の記事を参照
y3eadgbeによるSTLの記事
C++でハマったこと
- c++のコードなのにgccでコンパイルしようとしてハマった。(正しくはg++)
- エラーが大量すぎてやばい。よくさがすと行数を見つけられるので探す。
SRM実際の流れ
- SRM開始3時間前から5分前までにregisterする。(Arenaの右上の方のActive Contest→SRM第〇〇回→register)
- 開始時間になったら部屋に入る。(同じくActive Contest→SRM第〇〇回→Enter)
- はいってちょっと待つと開始です!的なアラートが出るので問題を開いて解く。
- 75分解くと終了。休憩5分。
- 次がChallenge Phase(撃墜されタイム)。基本何も出来ない。15分。
- 一応Summary→得点の数字のところを右クリで人のソースを見れる。撃墜ケースを思いついたら、失敗する入力を投げる
- 色は黄色がC++,緑がJava,青がC#
- System Test。遅い。じっとPCの前で待ってはいけない。遊ぶまたは寝る。
問題を解く流れ
- 問題文を開いて右上で言語を選ぶと、プラグインが勝手にファイルを作ってくれる。
- 解く。
- ローカルでコンパイル→実行(画像はまだ解いてないのでとったので全部FAILED)
- ただしテストケースが通っててもSystem Testで落とされると0点なので万全を期す必要がある
- Arenaの方でcompile,続いてsubmit
小技など
しめじたんの記事にある、プラグインを導入している前提です
プラグインでテンプレートを自動挿入する。
参考テンプレート
1 #include <string>
2
3 #include <algorithm>
4
5 #include <cfloat>
6
7 #include <climits>
8
9 #include <cmath>
10
11 #include <complex>
12
13 #include <cstdio>
14
15 #include <cstdlib>
16
17 #include <cstring>
18
19 #include <functional>
20
21 #include <iostream>
22
23 #include <map>
24
25 #include <memory>
26
27 #include <queue>
28
29 #include <set>
30
31 #include <sstream>
32
33 #include <stack>
34
35 #include <utility>
36
37 #include <vector>
38
39
40
41
42
43 using namespace std;
44
45
46
47 inline int toInt(string s) {int v; istringstream sin(s);sin>>v;return v;}
48
49
50
51 typedef vector<int> vi;
52
53 typedef vector<vi> vvi;
54
55 typedef vector<string> vs;
56
57
58
59 typedef long long ll;
60
61 typedef unsigned long long ull;
62
63
64
65
66
67 #define EXIST(v,e) (find((v).begin(), (v).end(), (e)) != (v).end())
68
69 #define SORT(v) (sort((v).begin(), (v).end()))
70
71 #define RSORT(v) (sort((v).rbegin(), (v).rend()))
72
73 #define PB push_back
74
75 #define SZ(a) (int((a).size()))
76
77 #define FOR(i,a,b) for(int i=(a);i<(b);++i)
78
79 #define REP(i,n) FOR(i,0,n)
80
81 #define TAG(i,v) REP(i,SZ(v))
82
83 #define trace(x) cerr << #x << " = " << (x) << endl
84
85 #define tracev(x) cerr << #x << " = "; TAG(i, x) { cerr << x[i] << ","; } cerr << endl
86
87
88
89 const int inf = 1 << 27;
90
91
92
93 class $CLASSNAME$ {
94
95 public:
96
97 $RC$ $METHODNAME$( $METHODPARMS$ ) {
98
99 $RC$ res;
100
101
102
103 return res;
104
105 }
106
107
108
109 $TESTCODE$
110
111 };
112
113
114
115
116
117 $BEGINCUT$
118
119 int main(void) {
120
121 $CLASSNAME$ ___test;
122
123 ___test.run_test( -1 );
124
125 }
126
127 $ENDCUT$
参考シェルスクリプト(コンパイル&実行)
以下の内容のファイル(仮にtmakeとする)をchmod 774して、パスの通ってるところに置くと、tmake一発でよくなる。ただしディレクトリに.cppが2つ以上あってはいけないので、解いたEasyを別のディレクトリに逃がす必要がある。
g++ -O2 -Wall *.cpp -o a ./a
printデバッグ時、テストケース5がでか過ぎて出力おおすぎ
-> テストコードのverify_caseなどと書いてあるところに、return; を挟む。