| 問題 | リンク | 備考 |
|---|---|---|
| 素数判定 | http://arc017.contest.atcoder.jp/tasks/arc017_1 | |
| ナップザック問題(ダイナミックプログラミング) | http://abc032.contest.atcoder.jp/tasks/abc032_d | データセット1だけ通せばOK |
| シミュレーション | http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2311 | |
| 全探索(グリッド) | topcoder SRM 150 Div2 Level 2 | |
| 全探索(幅) | topcoder SRM 453.5 Div2 Level 2 | |
| 全探索(深さ) | topcoder SRM 425 Div2 Level 2 |
ABCコンテスト
int a = 3;
/*
a = 5;
*/
cout << a << endl; // 3
int a = 5; a = 3; // a = 2; a = 1;
cout << a << endl; // 3
cout << 180/*cm*/ << endl;
- いわゆる「スコープ」
int a = 0;
for (int i = 0; i < 10; i++) {
a++;
}
cout << a << endl; // 10
for (int i = 0; i < 10; i++) {
int a = 0;
a++;
cout << a << endl; // どんな時も1
}
// cout << a << endl; // そしてここでaを出そうとするとコンパイルエラー
- 二次元配列
int a[2][3] = {};
a[0][0] = 0;
a[1][2] = 1;
// a[2][2] = 0; // メモリバイオレーション!
- ソート
sort(arr.begin(), arr.end())
- map
map<string, int> a;
a["moesan"] = 5;
a["hamko"] = 24;
for (map<string, int>::iterator it=a.begin(); it!=a.end(); it++) {
cout << it->first << " => " << it->second << '\n';
}
-
6Bは、数学力いる。
-
8Bは、mapというSTLを使わないとかなりきつい。map使わないと、僕でもめんどい。ググって
-
9Bは、できなくないけど、かなりむつかしい。これはレギュラーコンテストのA問題レベル。
-
10Bは面白いし、もえさんもできる
-
11Bは、常に'A' < 'a';であることを知らないときつい。大文字のほうが、数字としては小さい。
-
7Cがめっちゃ良問
-
14B 二進数表記を、"0b"をはじめにつけるものと定義する。
-
int型は2進数32桁である。
-
例:
-
int a = 3; // 0b00000000000000000000000000000011
int b = 10; // 0b00000000000000000000000000001010
-
以下、さすがに0がいっぱいで面倒なので、はじめの0はできるだけ省略して説明する。
-
&→aとbで両方同じだったら1、違ったら0を出力
-
|→どちらか片方にでも1があれば1、どっちも0なら0
-
if (a & (1 << n))の意味は、「aのn bit目が1ならif文の中身を行う」
-
a & (1 << n) の意味は、aのn bit目が0なら0、aのn bit目が1なら「2のn乗」
-
if文
if (1) {
cout << "見える" << endl;
}
if (104) {
cout << "見える" << endl;
}
if (-1) {
cout << "見える" << endl;
}
if (0) {
cout << "見えない" << endl;
}
if (a & (1 << n)) {
cout << "n bit目は1" << endl;
} else {
cout << "n bit目は0" << endl;
}
cout << (a & b) << endl; // 0b0011 & 0b1010 = 0b0010
cout << (a | b) << endl; // 0b0011 | 0b1010 = 0b1011
cout << (1 << 2) << endl; // 0b0100
cout << (a & (1 << 5)) << endl; // aの左から5ビット目が0なら0, そうでないなら何らかの数字が入る。
- 17Bはちょい大変。以下を実行してみて、理解できれば多分OK
for (int i = 0; i < 100; i++) {
cout << i << endl;
if (i % 5 == 0)
i++;
}