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

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-16 (月) 11:14:39 (2660d)