yuuho.wiki

カオスの欠片を集めて知恵の泉を作る

ユーザ用ツール

サイト用ツール


tips:atcoder:start

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
tips:atcoder:start [2020/06/21 11:31] – [c++データ構造再確認] yuuhotips:atcoder:start [2020/09/13 11:36] (現在) – [c++データ構造再確認] yuuho
行 3: 行 3:
   * [[https://gist.github.com/rigibun/7905920|競技プログラミングでのC++]]   * [[https://gist.github.com/rigibun/7905920|競技プログラミングでのC++]]
   * [[https://www.dropbox.com/sh/arnpe0ef5wds8cv/AAAk_SECQ2Nc6SVGii3rHX6Fa?dl=0|全てのテストケースはここに]]   * [[https://www.dropbox.com/sh/arnpe0ef5wds8cv/AAAk_SECQ2Nc6SVGii3rHX6Fa?dl=0|全てのテストケースはここに]]
 +
 +=== 有用な外部サービス ===
 +  * [[https://kenkoooo.com/atcoder/#/table/|AtCoder Problems]] : 問題の一覧
 +  * [[https://atcoderapps.herokuapp.com/atcoderperformances/|AdCoder Performances]] : 各コンテストでのパフォーマンスをグラフ表示
 +  * [[https://atcoder-scores.herokuapp.com|AtCoder Scores]] : 精進グラフ(重み付き解いた問題数とレートのグラフ)表示
  
 === 精進 === === 精進 ===
行 50: 行 55:
 ==== 数値最大値 ==== ==== 数値最大値 ====
 AtCoderでは Linux x86_64 を使っているので int 32bit, long 64bit, long long 64bit である。 AtCoderでは Linux x86_64 を使っているので int 32bit, long 64bit, long long 64bit である。
-^ 型 ^ 最大値 ^ +^ 型 ^ 最大値 ^ 値 ^ 
-| int | 21億 = $2 \times 10^5$ | +| int | 21億 = $2 \times 10^9|  ''2,147,483,647'' 
-| long = long long | 922京 = $9 \times 10^{18}$ |+| long = long long | 922京 = $9 \times 10^{18}$ |  ''9,223,372,036,854,775,807'' |
  
 最大値/最小値は基本的にベタ書きが良さげ。わかりやすいので。 最大値/最小値は基本的にベタ書きが良さげ。わかりやすいので。
行 98: 行 103:
 vectorの初期化 vectorの初期化
 <code c++> <code c++>
 +// 1次元
 +vector<int> arr(N, 0);
 +
 // 2次元 // 2次元
 vector< vector<int> > DP(N, vector<int>(M, 0)); vector< vector<int> > DP(N, vector<int>(M, 0));
行 114: 行 122:
  
   * for文: secondとfirstでアクセス.\\ <code c++>for(auto itr = kosuu.begin(); itr != kosuu.end(); ++itr){   * for文: secondとfirstでアクセス.\\ <code c++>for(auto itr = kosuu.begin(); itr != kosuu.end(); ++itr){
-        key = itr->first; +    key = itr->first; 
-        value = itr->second;</code>+    value = itr->second; 
 +
 +</code>
  
 valはmutable? atと[]はどう違う? 舐めるとどうなる? 舐めたときどんな順番になっている? valはmutable? atと[]はどう違う? 舐めるとどうなる? 舐めたときどんな順番になっている?
行 129: 行 139:
 mapのキーとして利用できる。 mapのキーとして利用できる。
  
 +標準の記号だけで作れるので書くのが楽。
 +<code c++>
 +map< pair<long,long>, pair<long,long> > data{};
 +data[{0,1}] = {0,0};
 +data[{0,1}] = { data[{0,1}].first+1, data[{0,1}].second   };
 +</code>
  
 +最初の記号には ''.first'' でアクセス。2つめの記号には ''.second'' でアクセス。
  
 === tuple === === tuple ===
行 382: 行 399:
 {{:tips:atcoder:img_0039.jpeg?400|}} {{:tips:atcoder:img_0039.jpeg?400|}}
 {{:tips:atcoder:img_0040.jpeg?400|}} {{:tips:atcoder:img_0040.jpeg?400|}}
 +
 +''tmp==T'' のところ,書き方によって異なる状態に収束する.
 +  * ''L==M'' としたら
 +    * Lは未満または同じ値
 +    * Rは大きい
 +  * ''R==M'' としたら
 +    * Lは未満
 +    * Rは大きいまたは同じ値
 +
 +欲しい答えに,「同じ値となる場合を含むか?」「大きい/小さい場合もあるが許容する?」というのをちゃんと判断して決めよう.
 +
 +
 +  * 出力が t 以上となる x の値が欲しいときは ''R==M'' で収束後 R を参照
 +  * 出力が t より大きくなる x の値が欲しいときは ''L==M'' で収束後 R を参照
 +  * 出力が t 以下となる x の値が欲しいときは ''L==M'' で収束後 L を参照
 +  * 出力が t 未満となる x の値が欲しいときは ''R==M'' で収束後 L を参照
 +
  
 ==== union-find ==== ==== union-find ====
行 597: 行 631:
 負になっていたら脳死で ''(hoge+mod)%mod'' するべき。 負になっていたら脳死で ''(hoge+mod)%mod'' するべき。
 減算の処理でミスりがち。 減算の処理でミスりがち。
 +
 +=== 累積和は最初に0あれ ===
 +ABC172C\\
 +累積和データを作るとき最初の部分に0を入れておかないと条件分岐が無限に増えて実装で死ぬ。
  
tips/atcoder/start.1592739108.txt.gz · 最終更新: 2020/06/21 11:31 by yuuho