プロコン/初心者向け

プログラミングコンテスト

問題リンク備考
素数判定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++;
}

最終更新: 2020-01-01