AtCoder Regular Contest 143 参加記

2022/6/26に開催されたAtCoder Regular Contest 143に参加しました。

atcoder.jp

土曜のABCでは、体調が万全でなかったこともあってか、茶パフォを喰らい惨敗という結果に。

ということで日曜のARCでは、できるだけ昨日の負け分を取り戻そうという気持ちで臨むこととしました。

今回の結果

で、結果としては、1完を取るのがやっとでした。。

ARC143結果
ARC143結果

パフォーマンスは、緑の下位辺りということで、昨日に続いての連敗ということになりましたとさ。

振り返り

B問題は惜しいところまで行ってましたが、解き切ることができませんでした。

ARC143提出結果
ARC143提出結果

A問題

A - Three Integers

一読した時点では、よくわからなかったが、サンプルデータでの遷移を紙に書いてみるなどすると多少見通しが良くなった。

  • A = B = Cの場合は、計算不要。とりあえずAを答えとして良い。

  • A, B, Cを昇順にソートする。まず、CAに合わせるため、BCからC - A分を引く。

  • ここで、A = C \ge Bという関係になっている筈なので、A,CBに合わせるため、ACからA - B分を引く。

  • A = B = Cという関係になっている筈なので、最初に引いた数と、2回目に引いた数と、 Aを足した数が答えになる。

  • ただし計算途中で、A,B,Cいずれかがマイナスになる場合は、達成不可能とする。

あとは、実装とテストを入念に行い、なんとか一発でACを取る事ができました。

が、、順位表を見ると、15分程度で解いた割には、既に1000以上もACがでていたので、びっくり。大分簡単目の問題だったが少し時間を掛けすぎたのかもと思いました。

14分56秒で1完。

提出コード

https://atcoder.jp/contests/arc143/submissions/32773565

B問題

B - Counting Grids

これも、一読して何も思いつかず。まずは、問題の条件を満たす並べ方を考えてみるが、ある程度適当に並べても大体条件は満たしそう。。というか、どうすれば条件が満たせないかというところから考えてみることにする。

で、紙上に書いてみると、条件を満たさない並べ方としては、列で最も大きい数字がある行に、それ以上の数字を並べる方法という感じになり、問題の条件を満たせないマスは、高々1つしかなさそうという事が分かった。

ということで、条件を満たせないマスの数字がNからN^{2} - ( N - 1 )までのパターンが存在。

満たせないマスの数字をAとすると、同じ列に配置するAより小さい数字のパターン{}_{A - 1} P_{N - 1}と、同じ行に配置するAより大きい数のパターン{}_{N^{2} - A} P_{N - 1}を掛け合わせたパターン数に、マスをどの位置に配置するかというN^{2}のパターン数をかければ条件を満たさないパターン数が求まるはず。

あとは、全体のパターン数からさっき求めたパターン数を引けば答えになるかということで実装を進めてみたが、サンプル1は合うけど、他が全然合わない。

MODの計算が間違ってるかと色々試行錯誤してみるも分からずで詰み。

コンテスト後に、検討してみると、満たさないパターンについて、満たさないマスとその行と列のパターンは考慮していたが、それ以外のマスの配置パターンが全く漏れていたかと思われる。惜しいところまで考察できていたが、今回は残念ながら解き切ることが出来ませんでした。

C問題

C - Piles of Pebbles

少し考えてみたものの何もわからずで詰み。

D問題

D - Bridges

問題すら見ておりません。

E問題

E - Reversi

問題すら見ておりません。

F問題

F - Counting Subsets

問題すら見ておりません。

これまでの実績

この土日でレートを大きく下げてしまう事になりましたとさ。

コンテスト実績
コンテスト実績

総括

今回のB問題は、考察の入り口までは来ていたものの、詰めが甘くて解き切れずでした。

上を目指すには、考察力も実装力も全然足りていない状態のようです。

とりあえず最近は、安直に解説ACを行わず、自力で考察することで、考察力をつけるように努力を重ねていこうという方針で過去問の勉強をしているのですが、まだまだ努力が足りない模様。来週に向けて今週の復習を進めていこうと思います。

ということで、また次回も頑張ります。

日鉄ソリューションズプログラミングコンテスト2022(AtCoder Beginner Contest 257)参加記

2022/6/25に開催された、日鉄ソリューションズプログラミングコンテスト2022(AtCoder Beginner Contest 257)に参加しました。

atcoder.jp

ぶっちゃけ、この日は飲み会などがあり、コンディションは万全ではありませんでした。しかし、先週は所用で出れなかったこともあったので、今回はとりあえず参加してみようという気持ちで参加することとしました。

とりあえず、目標は水パフォです。

今回の結果

で、なんと今回は2完終了という、なんとも情けない結果となりました。。。

ABC257結果
ABC257結果

茶色パフォーマンスを叩き出してしまい、レートは暴落。悔しいのう。。

振り返り

あまり頭が回っておらず、C以降の考察がてんで進みませんでした。

ABC257提出結果
ABC257提出結果

A問題

A - A to Z String 2

とりあえず、問題文の通りに文字列を構築して、X番目の文字を出力すれば良い。

あとは、普通に実装して、提出。問題なくACが取れました。

2分59秒で1完。

提出コード

https://atcoder.jp/contests/abc257/submissions/32709174

B問題

B - 1D Pawn

配列Aに対して、以下の処理を行う。

  • L_i = Kの場合、A_{K} = max(A_{K} + 1, N)

  • 上記以外の場合は、A_{L_i} + 1 \ne A_{L_i + 1}なら、A_{L_i}をプラス1する。

実装にだいぶ手間取りましたが、なんとかACを取り切ることができました。

13分45秒で2完。少し時間がかかり過ぎかな。

提出コード

https://atcoder.jp/contests/abc257/submissions/32717845

C問題

C - Robot Takahashi

問題の意味はわかるが、場合分けがしんどそうなこの問題。

  • 全員大人か、全員子供の場合は、答えはN
  • 一番体重が大きい子供と一番体重が小さい大人を比較して、子供の方が小さい場合も答えはN
  • あとは、大人の体重をリストに突っ込んでソートした後、一番体重が大きい子供の体重で二分探索を行い、何人の大人より重いかを算出してその値をNから引く

という感じの実装を行い、サンプルまで通ったので出してみたが、これはWA。。。

ならばと、f(X)の引数となるXの値を、一番体重が大きい子供の体重の±1の値と、一番体重が小さい子供の体重の±1の値で試行し、答えを出してみるも、これもWA。。。

結局、ここらで考察が行き詰まってしまい、解く目処が立たなくなってしまいました。。

仕方ないので、30分程度を残して諦め。。後ろの問題に賭けてみることにしました。

D問題

D - Jumping Takahashi 2

Cを諦めた直後ぐらいに一読しましたが、解法がてんで思いつかないので、早々に諦め。

E問題

E - Addition and Multiplication 2

桁DPのやっていく問題かと思い、実装に取り掛かってみたものの、遷移が思いつかずで詰み。

F問題

F - Teleporter Setting

問題すら見れておりません。

G問題

G - Prefix Concatenation

問題すら見れておりません。

Ex問題

Ex - Dice Sum 2

問題すら見れておりません。

これまでの実績

Highest更新目前で、またもレート暴落。。長い停滞モードが続いております。

コンテスト実績
コンテスト実績

総括

今回は、D以降が水Diff以上だったようですが、それにしてもC問題が解けなったのは残念でなりません。

あまりコンディションが万全でなかったのも敗因ですが、やはりまだ実力が不足しているというのが本当のところでしょう。今回の問題も復習して次回に備えたいと思います。

ということで、また次回も頑張ります。

AtCoder Regular Contest 142 参加記

2022/6/19に開催されたAtCoder Regular Contest 142に参加しました。

atcoder.jp

土曜のABCは所用のため不参加でした。ということで、今週のレート増減は日曜のARCに賭けるのみ。

今回のA問題は300点だそうなので、0完はなさそうという印象でしたが、いつもARCでは0完を避けることを心がけているので、今回もその気持ちで臨むこととしました。

今回の結果

で、今回はなんとか2完を達成することができましたとさ。

ARC142結果
ARC142結果

順位が1000位近辺だったので、レートが上がるかどうか微妙かと思ってましたが、結果をみると、なんと水パフォ。なんとかレートも上昇という形になりました。

振り返り

C問題を解き切ることができませんでした。

ARC142提出結果
ARC142提出結果

A問題

A - Reverse and Minimize

とりあえず、単純な見た目をしており、計算量はあまり考慮しなくて良さそうな問題という印象。

まず、Kに10を0回以上かけた数字が何個N以下となるかをカウントし、その次にKを左右反転した数字に対しても同じことを行う感じの実装を行う。が、、これはWA。

Kを左右反転しても同じ数の場合を見落としていた模様。ということで、対象となる数をSetで管理して、最後にSetのサイズを返すように変更することでACが取れましたとさ。

ちなみに、実装当初、Kを反転した数字がKより小さい場合は答え0というバカ避けのロジックをとりあえず入れておいたのですが、実際のテストケースではそのようなコーナーケースがあった模様。。

まあ、なんにせよ気になるロジックは入れといて損はないということを学びました。

14分11秒1ペナで1完。

提出コード

https://atcoder.jp/contests/arc142/submissions/32593224

B問題

B - Unbalanced Squares

これは、解法が早めに思いついてくれたので助かった。

上の行から順番に数字を埋めていった形から、奇数行と偶数行を入れ替えると、ある行から上と下の行を見た時には全て大きい関係になるか、全て小さい関係になるので、問題の条件は満たせる。

あとは少し重たい実装を行なって提出。ACが取れましたとさ。

36分0秒1ペナで2完。

C問題

C - Tree Queries

なんか久々に見たインタラクティブ系の問題。

とりあえず、初手では、頂点1と2から、そのほかの頂点の距離を質問し、答えを、(1から頂点iの距離+2から頂点iの距離)の最小の値としてみる。。がこれはWA。

ここで、1と2が隣り合う場合のケースがダメと気づく。この場合、全てのiについて、(1から頂点iの距離ー2から頂点iの距離)の絶対値が1になる筈、、ということで実装して提出したら、これがなんと1ケースだけ通らず。。。

あとは時間いっぱい、どんなケースがダメそうかを考えて、行き当たりばったりに実装と提出をしてみるものの、ACには至らずで時間切れとなりましたとさ。

今回のCは、通せてれば相当パフォーマンスが跳ねた筈なので、通せなかったのが悔しいです。

D問題

D - Deterministic Placing

順位表から見るにD問題以降はお通夜状態のようなので、問題すら見ておりません。

E問題

E - Pairing Wizards

問題すら見ておりません。

F問題

F - Paired Wizards

問題すら見ておりません。

これまでの実績

とりあえず、直近のHighest付近まで戻せました。

コンテスト実績
コンテスト実績

総括

今回はCが解けずで、レートは跳ねませんでしたが、個人的には惜しいところまで行ったという印象です。

ARCは、どちらかというとABCのような典型問題よりも考えがいのある問題が多いという印象。来週もARCがあるので、高パフォーマンスが出せるように精進していこうと思います。

ということで、また次回も頑張ります。

エイシングプログラミングコンテスト2022(AtCoder Beginner Contest 255)参加記

2022/6/11に開催された、エイシンプログラミングコンテスト2022(AtCoder Beginner Contest 255)に参加しました。

atcoder.jp

先週のABCコンテストは、久々の茶パフォを出してしまい、レートは大幅に低下。今回はその負け分を取り戻そうという気持ちで臨むこととしました。

今回の結果

で、今回は4完というなんとも微妙な結果となりました。

ABC255結果
ABC255結果

今回も負けを覚悟してましたが、パフォーマンスはギリギリレート以上に出てくれたようで、なんとかプラス1という結果。

とりあえず連敗は避けることができましたー。

振り返り

今回は、前半から実装が重い問題が続いたという印象です。

ABC255提出結果
ABC255提出結果

A問題

A - You should output ARC, though this is ABC.

2 \times 2の行列AからA_{R,C}を出力せよ、という問題。

やるべきことは簡単だが、Javaだと入力を書くところから結構めんどくさいw

とはいえ、ここは普通に実装して、提出。問題なくACが取れました。

2分22秒で1完。

提出コード

https://atcoder.jp/contests/abc255/submissions/32375017

B問題

B - Light It Up

B問題にしては難易度が高めの問題が出て来たかという印象。

とりあえず全探索が間に合いそうな制約なので、全探索で実装することに。

明かりを持っていない人それぞれについて、一番近いところにいる明かりを持っている人の距離を求め、あとはその距離の最大値を答えとして出力すれば良い。

あとは、実装して問題なくACが取れました。

19分5秒で2完。少し時間がかかり過ぎというところ。

提出コード

https://atcoder.jp/contests/abc255/submissions/32383922

C問題

C - ±1 Operation 1

これは考察が結構ややこしそうな問題。なんとか頑張って場合分けを考えていく。

とりあえず、AXの差分を取る。差分が0の場合は、答えは0

公差D0の場合は、差分の絶対値がそのまま答えとなる。

Aに、公差Dを足していくことで、Xとの差が開いていくような条件の場合は、最初にとった差分の絶対値がそのまま答えとなる。

上記以外の場合が結構ややこしいのだが、「良い数」のうち、Xと差分が最も小さいものの候補としては、

  • 初項Aに対して、差分を公差Dで割った回数分Dを足した数。

  • 上記に対して、もう一回Dを足した数。

  • 初項Aに対して、公差DN - 1回足した数

以上3候補が挙げられる。

あとは、公差を足す回数が項数以上にならないように考慮して実装すれば良いという感じだったが、実際は実装で色々とバグらせてしまい、ACを取るまでに合計3回もWAを喰らうこととなりました。

今回も、凡ミスをしてしまうことになり、反省しきりです。

44分43秒3ペナで3完。だいぶ立ち遅れてしまったという感じ。。

提出コード

https://atcoder.jp/contests/abc255/submissions/32394948

D問題

D - ±1 Operation 2

とりあえず数列Aをソートして累積和を取っておく。

Xの値が、Aのどの数より小さい場合は、Aの全ての合計からX \times Nを引いた値が答えとなる。

Xの値が、Aのどの数より大きい場合は、X \times NからAの全ての合計から引いた値が答えとなる。

上記以外の場合は、ソート済みの数列Aを二分探索し、前から何個目までの要素がXより小さいかを求める。

Xより小さい要素数B個とした場合、答えは、X \times Bから、ソート済み数列AB個目までの累積和を引いた値と、ソート済み数列AB + 1個目以降の累積和からX \times (N - B)を引いた数を足した値となる。

なんとか、ここまでの考察を進めることができて、実装。なんとかACを取り切ることができましたとさ。

71分32秒3ペナで4完。これでは今回の勝ち負けは微妙なところ。

提出コード

https://atcoder.jp/contests/abc255/submissions/32404830

E問題

E - Lucky Numbers

とりあえず、一読して解法が思いつかない問題だが、最終まで喰らいついてみることに。

で、とりあえずAの先頭の値を決めれば、あとの要素は確定するので、先頭要素をXのどれかの要素に固定してから導出したAに何個Xの値が含まれているかを調べれば良いのでは?という感じで実装。

が、、結局この考察はサンプルすら通らずでダメ。。

あとは色々考察をしてみるも、解法には至らずでそのまま時間切れとなりました。

F問題

F - Pre-order and In-order

問題すら見れておりません。

G問題

G - Constrained Nim

問題すら見れておりません。

Ex問題

Ex - Range Harvest Query

問題すら見れておりません。

これまでの実績

とりあえず連敗は避けることができましたとさ。

コンテスト実績
コンテスト実績

総括

今回はE以降が水Diff以上で個人的には難問だったので、4完はある程度しかたないところ。C問題で凡ミスが多かったのが反省材料です。

とりあえず、水Diffあたりの問題を本番で解けるようにするのが直近の課題ですな。過去問などを解説なしで考察するなどして、考察力を向上していければというところです。

ということで、また次回も頑張ります。

AtCoder Heuristic Contest 011 参加記

2022/5/28-2022/6/5に開催されたAtCoder Heuristic Contest 011に参加しました。

atcoder.jp

ヒューリスティックコンテストは開催頻度が低いということもあり、せっかくの開催機会があるのであれば出なくては損という気持ちでとりあえず参加。

1週間以上の期間がある長期コンテストなので、じっくり取り組もうかという気持ちで臨むこととしました。

今回の結果

で、今回は、「とりあえずは提出はしました」という結果しか残せておりません。

AHC011結果
AHC011結果

しかし、こんな提出でも一応緑パフォーマンスが出てくれたようで、レーティングは上がっちゃいました。

振り返り

本当に、とりあえず出しただけという結果です。

AHC011提出結果
AHC011提出結果

A問題

A - Sliding Tree Puzzle

スライドパズルを解いて木構造を完成させようという今回の問題。

とりあえず、浮かんだ考えとしては、ランダムに動かして評価値を上げていく戦略で攻めたらほぼ木構造は完成しないだろうなという感じ。

ということで、最初に木構造の完成図を用意して、その図を目指してパズルを動かしていく方が良いんじゃないかという発想に至りましたが、そもそも木構造を与えられたパズルのピースの種類から完成させるというところが既に難問すぎて無理。。

ということで、色々思考を巡らせるもまったく実装は進まず。。週末も近づいて来たところで、一旦正の得点を取れそうな、なにも出力しないプログラムを提出してお茶を濁すことに。

まあ、同様のことをしている人は結構いるようで、順位表を見てると同点の人が結構沢山いました(笑)

その後は特に実装もせずにアルゴリズムの精進に時間をかけることにしましたとさ。

最終提出コード

https://atcoder.jp/contests/ahc011/submissions/32193631

これまでの実績

今回は参加賞をいただきました。

コンテスト実績
コンテスト実績

総括

今回は、参加しただけという形になりましたが、レート的には、次回緑にはいけるかもというところ。次回は参加賞でなく、まともな実装をして入緑を目指します。

ということで、また次回も頑張ります。

AtCoder Beginner Contest 254 参加記

2022/6/4に開催されたAtCoder Beginner Contest 254に参加しました。

atcoder.jp

先週土日のコンテストで連勝し、レートはHighest更新。この流れに乗って今回は水パフォの結果を出し、さらにレートを更新しようという気持ちで今回のコンテストに臨みました。

今回の結果

しかしながら、終わってみれば3完止まり。。しかも3ペナも食らいました。。

ABC254結果
ABC254結果

パフォーマンスは、緑にも届かず。今回レートの方は下がることになりました。

振り返り

A問題でペナを喰らったり、D問題で大幅に時間を浪費するなど、結果は散々でした。

ABC254提出結果
ABC254提出結果

A問題

A - Last Two Digits

受け取った数字Nの下2桁を出力するだけの問題。

これは簡単だと、N100で割った余りを出力⇒余りが1桁の場合を考えておらずWA。。

N100で割った余りを%dフォーマットで出力⇒これも余りが1桁の場合を考えておらずWA。。何を考えてんだろう。。

N100で割った余りを%2dフォーマットで出力⇒やっとAC。

ということで、提出を焦ったが為に、2ペナも食らってしまいましたとさ。幸先の悪いスタートです。

2分25秒2ペナで1完。

提出コード

https://atcoder.jp/contests/abc254/submissions/32203136

B問題

B - Practical Computing

N×Nサイズで配列を作成し、あとは問題文の通りに値を入れて出力するだけのように見える。

ということで、問題文の通りに実装して提出。問題なくACが取れましたとさ。

9分36秒2ペナで2完。少し実装が重かったという印象。

提出コード

https://atcoder.jp/contests/abc254/submissions/32210699

C問題

C - K Swap

なんかCにしては、めっちゃ難しそうな問題。

とりあえず交換できる位置自体は固定されている。よって先頭から見て、K個先の要素が小さい場合は交換するということをやって、最後にソートされているか確認するという解法でやってみる。

が、、一回だけでは全く足りないパターンが考慮されておらずでWA。。

この後、良い解法がなかなか思いつかずで詰んだかと思ったが、よくよく考えると、ソートはK個飛びにできるので、配列自体をK個に分割して、それぞれをソートし、元に戻したときにソートされているかを判別すればよいのではと思いつく。

TLEが心配でしたが、この解法で問題なかったようで、なんとかACを取ることができました。

37分57秒3ペナで3完。

提出コード

https://atcoder.jp/contests/abc254/submissions/32224978

D問題

D - Together Square

苦手な数学系の問題。。

i = jの場合はカウントに含まれるのは当然だが、それ以外のパターンを上手くまとめることができず。

とりあえず、1からN×Nの平方数それぞれについて約数列挙を行い、あり得るi,jを導き出した後i,j両方がN以下ならカウントに含めるというゴリ押しの対策を実装してみるも、サンプルまでしか通らず、提出したらTLE。。

この後も、色々試してみたが、結局解くことはできずで時間切れとなりましたとさ。

E問題

E - Small d and k

一応、Dと同等ぐらいの難易度のようなので問題を確認しましたが、パッと解法が思いつかず。

とりあえず、早々にこの問題からは撤退を決め込むことにしました。

F問題

F - Rectangle GCD

問題すら見れておりません。

G問題

G - Elevators

問題すら見れておりません。

Ex問題

Ex - Multiply or Divide by 2

問題すら見れておりません。

これまでの実績

先週Highest更新したと思ったら、大きな下げを喰らいました。。また1から出直しです。

コンテスト実績
コンテスト実績

総括

今回のD,E問題は、水色パフォ近辺というところだったようで、まだまだこのあたりを安定して解ける実力は無いようです。

最近は、仕事の方が少し忙しく、精進も少し停滞気味ですが、やはり時間を見つけて精進していかないとレートの方も頭打ちになってきますね。負けたことは仕方ないので、また来週に向けてコツコツ頑張っていこうと思います。

ということで、また次回も頑張ります。

AtCoder Regular Contest 141 参加記

2022/5/29に開催されたAtCoder Regular Contest 141に参加しました。

atcoder.jp

今回のA問題は400点だそうなので、場合によっては0完で終わるリスクもあるかと思いましたが、いちいちUnratedで参加するとか面倒なことはやりたくないので、今回もRated参加。とりあえず、A問題は突破するぞという意気込みで臨みました。

今回の結果

当初の目標通り、なんとか1完を達成することに成功しました。

ARC141結果
ARC141結果

で、肝心のパフォーマンスは、1完でも水パフォが出てくれて、なんとHighestも更新。結果としては上々という形になりました。

振り返り

B問題を1時間半かけて解き切ることが出来ませんでした。

ARC141提出結果
ARC141提出結果

A問題

A - Periodic Number

とりあえず、Nより1桁小さい全桁9の数字が「周期的な数」の候補となる。

あとは、Nの桁数の約数ごとに考える。Nの先頭から、約数の数分取り出した数字をmの候補とし、構築した「周期的な数」をNと比較し、答えの候補になるかを判定する。ここでNより大きかった場合は、mの下一桁を1ずつ減らして再度「周期的な数」を構築することを繰り返す。

多少実装が重くなりましたが、これでなんとかACを取りきる事ができました。

22分47秒で1完。とりあえず、0完は回避しました。

提出コード

https://atcoder.jp/contests/arc141/submissions/32084542

B問題

B - Increasing Prefix XOR

考察を開始してから30分程度は、二項係数で求めるのかとかあれこれ悩んでいました。。

だが、サンプルを元に考えてみると、隣同士のXORが増加していくということは、A_{i+1}を二進数で見たときの桁数がA_iの桁数より明らかに大きい事が条件ではないかと推察。

で、ここまで考察できれば、あとはdp\lbrack i \rbrack \lbrack j \rbrack :=i個目の要素が二進数でj桁となる通り数となるDP配列を立てて遷移を考えれば解けるはず。

が、、実装を進めてみるも、どうしてもサンプル3が合わず。。1時間弱悪戦苦闘しましたが、結局時間切れ終了となりました。。

後ほど解説を確認すると、考察の方向性自体は間違っていなかった模様。問題は実装力の不足ということで、まだまだ精進が足りないと痛感させられる結果となりました。

C問題

C - Bracket and Permutation

ワンチャンあるかと、問題文を確認するも何もわからず。

D問題

D - Non-divisible Set

問題すら見れておりません。

E問題

E - Sliding Edge on Torus

問題すら見れておりません。

F問題

F - Well-defined Abbreviation

問題すら見れておりません。

これまでの実績

今週の土日の連勝で、少しながらもHighestを更新。ここのところ停滞モードが続いてましたが、嬉しい結果となりました。

コンテスト実績
コンテスト実績

総括

今回は0完が回避できたものの、B問題が解き切れなかったのが悔やまれるところ。考察スピードも問題あるかというところですが、実装力もつけないといけないというのが今後の課題となります。

最近は、ABCや典型の過去問に取り組んでいることが多いですが、ARCの過去問も精進のメニューに入れていかないといけないなーというところです。

ということで、また次回も頑張ります。