0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoder Beginner Contest 235 の思考メモ(5完)

Posted at

はじめに

AtCoder Beginner Contest 235に参加して75分5完、955位でした。
あまりにも不甲斐ない内容だったために再発防止のためにコンテストでした思考を時系列順にまとめたいと思います

A - Rotate

21:00:00 開始
問題文中に

3 つの数字 x,y,z をこの順に並べてできる 3 桁の整数を xyz と表すことにします。

という文を確認

  • 文字列として受け取って一桁ずつ処理
  • 3桁なので力技で行く

の2択から、汚くても速く書ける後者を採用

C++
    ll n;
    cin>>n;
    ll a,b,c;
    a=n%10;
    n/=10;
    b=n%10;
    n/=10;
    c=n;

21:01:53 提出 AC
汚いコードだが、とにかくAC

B - Climbing Takahashi

実際にシュミレートするだけ

21:03:36 提出 AC

C - The Kth Time Query

問題を流し読みし、制約をろくに読まずvectorで実装し始める
2×10^5なら充分がと思いこむがそれだと実際に必要な配列の個数はaiの最大値の10^9個

21:08:00 Google検索 c++ map
実装し終わったものの、テストケース2でランタイムエラーを起こす
ここでようやくmapを使わなければいけないことに気がつく
C++日本語リファレンスを見ながら実装するも、
mapにその要素があるかどうかをempty()でやろうとしてバグらせる
.count(x) == 0 に修正してAC

21:22:07 提出 AC
もうここで14分無駄遣いしている。この14分がなければ青パフォであった

D - Multiply and Rotate

出てくる数字がせいぜい10^6の10倍程度なのでとにかく出てくる数字を全部出してsetで管理すれば良いなと判断

21:40:00 Google検索 set同士の足し算 c++
insertでsetを足そうとして手間取る
setの結合はmerge かあ。足し算 という単語も適切ではないっぽいので、しっかりと使うものは頭に入れておくこと

21:42:20 提出 TLE
現在のループで新しく発見した数字が空ならループを抜ける処理を書いていたが、
いくつかのケースでTLEが発生。無限ループが出たと思われる

21:45:11 提出 AC
この問題ではすぐに答えが出るだろうと判断。1000回の試行で解がでなければ不可能と判断して打ち切る処理を足してAC
5分以上の思考をするならペナルティ覚悟ですぐ出す、という競技プログラミングの解き方をした

E - MST + 1

Eの問題に面食らったが、最小全域木の求め方のアルゴリズムがしっかり頭に入っていたため、
それをやっていけば良いと判断

21:52:00 Google検索 c++ 配列 上限 個数
しかし、クエリをO(1)で処理するためにはクラスカル法の全状態を保存しなければ行けないのでは?と迷走
200000*200000で40000000000個の配列を作ろうとして流石に無理だと考察を続ける

22:00:00 Luzhiled's Library内 でunionfindを捜索
クエリの先読みだと気付き実装を開始
AtCoder Libraryを使えば良さそうなものだが、未だにpaiza.ioで実装しているため人のライブラリを使わせてもらっている

22:10:34 提出 AC
グラフの持ち方が

C++
vector<pair<ll,pair<ll,pair<ll,ll>>>> g(m+q);
cin>>a>>b>>c;
g.at(i)={c,{-1,{a,b}}};

という実装でいいのか疑問だったが、他の人の提出を見てみると
pair< pair < int,int>, pair< int,int> > とかタプルで作成しているのでまあいいのだろう。

F - Variety of Digits

桁DPだということは制約を見てすぐ分かったが、
ちゃんと桁DPを実装したことがなかったためえっちらおっちら実装しているうちに時間切れ。精進しなさい

今後の課題

  • set,mapの使い方を再確認 コンテスト中に見るチートシートを作成しておく
  • D問題で無限ループする原因の特定と対処法の確認
  • 桁DPの過去問を解く
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?