ももはらの日記

日記を書きます

CodeQUEEN 2026 参加記

はじめに

こんばんは、ももはらです。
今年もCodeQUEENに参加して、結果は15位でした。過去一順位が低いですね!

ちなみに去年は優勝してます。
momoharahara.hatenadiary.com

この記事ではCodeQUEEN2026 に参加するまでと当日にやったことを書こうと思います。

参加するまで

親戚の結婚式があり、大阪にいました。

前日夜に大阪から東京に移動し、家に着いたのは当日0時。わくわくですね。

当日

お昼

いつもだと他の方と一緒に食べたりしてたんですが、流石に日程がカツカツだったのでギリギリまで寝て、おにぎりを食べました。
てんぷらさんがスポンサー参加する予定だったのですが、38度後半の熱を出していて流石にやばいので家に置いていきました。(ごめん)

渋谷駅から会場まで歩いてたら、rinrionさんとおばけちゃんと偶然合流して嬉しかったです。

会場

CodeQUEENTシャツと恒例のともえさんファイルをもらいました。わーい。

前はdokinさん隣はAyunaさん右後ろはmoonさんがいて知り合いばかりの安心感ある席でした。

後ろの席に初参加の suminoeno7 さんもいて、軽くお話できました。
Astroseekさんからsuminoeno7さんは情オリ / 数オリも強いとお聞きして、「優勝候補筆頭ですね!」とか言ってたら、ほんまに優勝してすごい!
うえこさんも挨拶しにきてくれて、いつも礼儀正しくてすごいなと思いました。茶髪が似合ってました。

前の席のdokinさんに「消しゴム貸していただけませんか。。?」ってこっそり聞かれて、お話を伺っていたら、消しゴムと間違えて修正テープを買ってきたらしくてめちゃくちゃ笑いました。Monoの形をした修正テープあるんですね。。。
残念ながらペン派で消しゴムを持ってなかったんですが、右斜め前の甘味料さんが貸してそうだったのでよかったです。優しい。

連日の外出で腰痛がひどいので席から離れずにいたのですが、いろんな人とお話できて感謝です。

コンテスト

問題一覧

atcoder.jp

結果


A ⭕️ 2:08 AC

X = Ci のドレスについてChmaxします

本番提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069802

B ⭕️ 7:55 AC

Bから結構複雑そう
mapでl,r関係なくカウントして
valueが2以上の場所がk+1以上連続したら一度足をおろすみたいにしました

本番提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069807

C ⭕️ 12:24 AC

基本貪欲で良さそうで、同じ種類をk/2より多くは取れないです。
最初列で考えてて(k+1)/2で判定してたけど、サンプル2で救われました。優しい。

本番提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069820

D ⭕️ 19:49 AC

蛇行してく感じでvectorにつめて、2個ずつ出力するのが楽そうです。
あたり方針だったのかこの時点で1位に躍り出ます。ここから先は落下のみです。

本番提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069823

E ❌

lが小さい方から見ていって、今までカバーしてた範囲から最大のrを取ってくので良さそうです。なぜか落ちます(え?)
方針はあってたんですが、変に判定をまとめようとしてバグらせていました。

後日提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069829

F ❌

dp[何番目の鍵盤か][何個鍵盤を叩いたか][最後に叩いた鍵盤の位置][次叩くのは何本目の腕か][次に叩くのは何番目の指か] で5次元DPを書いたところなぜかサンプル4が合わず一生困っていました。
翌日復習したところ、誤読を発見します。

ただし、同じ腕にある指で押すどの 2 つの鍵盤についても、その番号の差は D 以下でなければなりません。

そう、同じ腕の隣の指同士がD以下だと思っていたら、同じ腕の任意の指同士がD以下だったのです!
dp[何番目の鍵盤か][何個鍵盤を叩いたか][今の腕で最初に叩いた鍵盤の位置][次叩くのは何本目の腕か][次に叩くのは何番目の指か] として当日の実装をちょっと修正したらサンプル4の値が合い、無事ACできました。くーん

後日提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069838

G ❌

数学問ぽいので当日はskipしてしまいました。

後日真面目に考えたら20分くらいで考察・実装が終わってしまい、ちゃんと考えるんでした。。。

dp[何番目のxiまで見たか][xi以下の値を何個とったか] でDPして、dp[i][j]でi<=jになる場所だけ遷移に使えばいいです。
最大値も、xi = n-xiに置き換えて解けば同じ解法で求められます。

後日提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78069848

H ❌

当日はFの後この問題に張り付いていました。
当日の方針は、dijkstraで到着した頂点に動物がいたらmergeしていく方針でした。
コンテスト終了2分前にサンプルが通ったので提出すると 28AC / 10WA / 3TLE になりました。ぐわー

後日、この方針は、下記のような場合に嘘のため当然落ちることに気づきました。。

  • 近いけど大きい動物でmerge
  • ちょっと遠いけど小さい動物でmergeしてって↑の範囲に辿り着く

この後も考えていて、「うまく幅が広い道順にmergeして、動物ごとにその集合に対して辺をはれないだろうか?」となっていたのですが、上手い実装の仕方が思いつかず困り果てていました
てんぷらさんに助けを求めたところ「マージ過程を表す木」とヒントをもらい、なんとかACです!

イベントソート的に考えると綺麗に実装できました

  • t=1のときはマージ過程を表す木を構築
  • t=0のときは今の動物のいる頂点の親に対して、コスト0の辺を貼る

後日提出: https://atcoder.jp/contests/codequeen2026-final-Public/submissions/78070814

懇親会

今年は例年よりデザートやフルーツが多め?で美味しかったです!チーズケーキ3つもとっちゃいました

ちっちゃいピザみたいなのも可愛いし美味しかったのですが撮りそびれました。
毎回参加者の傾向を考えてメニューが検討されてそうで本当にありがとうございます。

いたちゃとおばけちゃんとスポンサーブースも色々回れました
無事ちょくだいカレーが完成して、ジャンピングちょくだい付箋もゲットしました!
(ちなみに目玉焼きシールが切れて、途中からちょくだいさんシールが登場したので激レアカレーです。)

fix stars さんのTシャツが通気性良くてよくボルダリングの時愛用しているので、またもらえて嬉しかったです。
estieさんからはタンブラーをもらったので、こちらもありがたく使わせてもらおうと思います!

懇親もちゃんと?していて、
去年参加できないツイートされてて気になってたesunoさんとお話しできたり、
akiaさんのピンクインナーカラーの巻き巻きツインテールが可愛かったり、
デザインされてる憧れのなちかわさん、こまここさんと軽くご挨拶できたり、
いろんな人とお話しできました!

おわりに

今年はバタバタでの参加でコンテスト的には反省点も多い回でしたが、新たに強い人が登場するのを体感できたり、初めて会ったり久しぶりに会った人と話せてとても楽しい1日でした。
また来年も参加して、出来ればもっといい順位を取れるよう頑張りたいです!

CodeQUEEN 2025 参加記

はじめに

こんばんは。ももはらです。
この度CodeQUEEN2025で優勝しました!

この記事ではCodeQUEEN 2025 に参加するまでと当日にやったことを書こうと思います。

参加するまで

2023年と2024年のCodeQUEENでは3位になっており、今年こそは万年3位から脱出したいという思いでのぞみました。

momoharahara.hatenadiary.com

予選のABC410では全体72位で女性参加者1位で決勝進出する形になりました。

予選で順調な滑り出しを切れたのは良かったのですが、去年の参加記にも書いている通り、今年は「打倒ngtkanaさん」を目標にしていたところ、なんと順位表におらず、「目標なくなった。。?」となっていました。
打倒ngtkanaさんじゃないなら、打倒dokinさん。。?

そんな中で夫とdokinさん対策について話しあい、新たな知識を詰め込むよりも実践経験を積むのがいいだろうという方針に固まりました。
その後は普段よりもバチャへの参加やCodeforcesへの参加を増やし、できるだけコンテスト形式で練習を積みました。
その結果として、Codeforcesでは現在薄橙までレートが伸びています。

またこどふぉのdiv2/div3バチャをしたり、F力 アップバチャ、まよこんバチャなどに参加して実装力を上げる練習をしました。

当日

お昼

おばけちゃん、もこぴちゃん、いたちゃの3人と会場近くの大戸屋に行きました。
期間限定の筋肉飯?おいしかったです。

会場

今年もTシャツがあったので早速着ました!
他にも恒例のともえさんファイルがあって可愛かったです。

3回目になるとかなり知ってる顔が増えてて、以前CodeQUEENで会った子だけでなく、女子部鯖でボドゲボルダリングに行って遊んだ子とかもいて、かなりホーム感がでてきてました。

ただ、やはりコンテスト前には会場が静かになり、だんだん緊張してきて困りました。

コンテスト

問題一覧
atcoder.jp

結果

C ⭕️

結構難しくて、3問目でこれなんだとびびりました。
この問題は「自分より大きい番号のファンが前にいてもk人までならOK」というふうに解釈できます。
これは大きい方から順列に入れてって、k+1番目までに挿入するのを繰り返すと良さそうです。

D ⭕️

最初に平均ではなく合計だと思っていて二回実装しました。
平均をKにしたいので全てのa[i]を-Kしておくと、「累積和が0以下になる区間で最大の長さの区間を求める」という問題になります。
あとは累積和の値を座標圧縮して、累積和の値に対するindexのminをセグ木で管理すると求めることができます。

E ⭕️

CRTで条件を列挙したくなりますが、この問題だとLCMが上限を超えてしまいます。
互いに素なものについては考える必要がないことがわかると、約数についてのみ考慮すればよいのでこの問題が解けます。
1. b[i]の約数dについてそれぞれa[i]%d mod dとして制約を追加
2. 制約ごとに、さらにその約数の制約について解が存在するかをCRTでチェック

F ❌

条件の有無について全探索して、包除原理すると解けそうという気持ちになる。
一旦飛ばしてGを解いた後に戻ってきて再度考えましたが、一直線に並んでるかの判定などを詰め切れずに終了しました。

G ⭕️

ライブ会場は4つ寄らなきゃいけないと言いつつ、実質 1-> p -> q -> N の4つでp,qの2つの頂点のみを考えれば十分。
qの選び方はpと違いさえすれば良いので、dp[v][p]についてdijkstraしたくなる。
さらに、上の条件であれば2種類のpについて最小値がもとまっていれば、qと違う頂点が必ず一つ含まれているので問題ない。
このことからtop2を管理するdijkstraをすれば良いことがわかる。実装が大変だったけどなんとかAC。

感想

Cから結構難しくてひやっとしましたが、なんとかEまでしっかり通すことができました。
Eを解いた時点で上位陣だとかなり遅い方だったので焦りを覚えていたのですが、FGHを見て一番得意そうなGが解けたのでそのまま実装に入りました。
Gが間に合わせられたのはバチャなどで実装速度を上げる練習をしていた成果が出たと思うので、とても嬉しいです。

懇親会

美味しいご飯を食べたり、スポンサーのお話を聞いたりしました。
今年は1回目2回目よりもさらにいろんな人とお話しすることができた気がするので嬉しかったです。
ぬいぐるみが集まってるところにスゴイカタイヌイとして参加させてもらったりしました。

女子部オフ会

お蕎麦を食べながらいろんな人とお話できて楽しかったです!

rinrionさん企画ありがとうございました!

おわりに

今年は念願の優勝ができて本当に嬉しいです。
問題の配点にかなり助けられた所が大きいので、来年は今年より強くなれたらいいなあと思いました。

AHC037参加記 71位解法

はじめに

こんにちは。ももはらです。 AHC037で初黄パフォをとったの参加記を残そうと思います!

問題概要

atcoder.jp

  • N個の(a,b)の座標を作りたい
  • 次の操作を0回以上5N回以下できるので、できるだけコストを最小化したい
    • 座標 (x,y) から x'>=x, y'>=y の座標 (x',y') をコスト (x'-x) + (y'-y)で作ることができる
    • 元の座標も残る

実装

案1: 一番近い座標から作ってみる

  • 考察
    • まずはN点直接作る場合について考えると、最短距離の座標から伸ばすのが最適
  • 提出
  • 得点: 3430697513
  • sample0の結果: Cost = 43850900145, Score = 22803065

案2: くの字の位置の右下に中継点を足してみる

  • 考察
    • コスト (x'-x) + (y'-y) でx,y独立なので、 (x', y') -> (x', y) -> (x,y) みたいに、x,yそれぞれで動いてもコストは同じ
    • くの字の位置に中継点を置いておく
  • 提出
  • 得点: 4072232940
  • sample0の結果: Cost = 36739552599, Score = 27216851

案2': くの字の位置の右下に中継点を足してみて、使わなかったら左上においてみる

  • 考察
    • 右下に置いた中継点を使わなかったら、左上に中継点置いてみる
    • 確実に損はしないのでこの方針を書いてみた
    • (後の方針とぶつかったので案3の時には消えました)

=>

  • 提出
  • 得点: 4386163855
  • sample0の結果: Cost = 34370792954, Score = 29092576

案3: 左の直線に伸ばした方がよくなるなら、直接伸ばしてみる

  • 考察
    • すでに左側に直線があったら、そこに中継点を置いて、伸ばした方がいいパターンがある

=>

  • 提出
  • 得点: 4534273060
  • sample0の結果: Cost = 33013876167, Score = 30288322

案4: 下の直線に伸ばした方がよくなるなら、直接伸ばしてみる

  • 考察

    • 案3の下に伸ばすバージョン
  • 提出

  • 得点: 5120976945
  • sample0の結果: Cost = 29490148079, Score = 33907423

案5: 無駄な頂点をのぞく

  • 考察
    • みやすくしたら考察しやすくなるかなーと思ったら何故かスコア伸びた
  • 提出
  • 得点: 5218181604
  • sample0の結果: Cost = 28842972744, Score = 34668234

おわりに

最終順位は71位でした!

ラソンぽい解法が入らない回の方が成功しがちですが、ちょっとずつマラソンぽいのもできるよう頑張りたいです

CodeQUEEN 2024参加記

はじめに

こんにちは、ももはらです。この度、CodeQUEEN 2024 で3位になりました!

この記事では、来年まで嬉しさと悔しさを忘れないように、CodeQUEEN 2024 に参加するまでと当日感じたことを書こうと思います。

問題の内容のネタバレも含みますので、ネタバレが嫌な方は下記の問題を先に見るか、コンテストの章を飛ばして読んでいただければと思います。

atcoder.jp

 

参加するまで

CodeQUEEN 2023 にも実は参加しており、3位になっています。

 

Dが解けずにかなり悔しい思いをしました。理由としては下記の3つが大きいと思っています。

  • オンサイト順位表ではこの問題を解けた人はおらず、順位表から見るとかなりの難問に位置していた
  • 珍しく優勝を争っている立場というのに緊張していた
  • 当時1年競プロを辞めて復帰したてだった

 

そして、この年のコンテストではE問題が勝敗を分けました。

atcoder.jp

当日dokinさんが異常に早く通していたこの問題では、 max Σ(max(Bi)-min(Bi)) というスコアを素直に計算しようとするとセグ木などで実装が必要になるのに対して、max Σ(a - b) (a,b∈Bi)と変形してからDPするとめちゃくちゃ早く解けると教えてもらい感動していました。

mayocornさんは私と同じくセグ木解だったのですが単純に実装速度が早すぎて負けました。すごすぎます。

考察面でも実装面でも敗北し、来年はもっと上手く、もっと早く実装できるようにしたい!という思いで練習を重ねてきました。

練習内容としては主に下記を行いました。

  • できるだけABCに参加する
  • まよこんバチャに参加してみる
  • 競プロを辞めていた時期のABCをバチャする
  • 水diff〜黄diff以下埋め
  • FPSや高速ゼータ変換など新しいアルゴリズムを勉強してみる

その結果、去年参加時のレート1985から今年はレート2101まで伸ばした状態で参加することができました。

CodeQUEEN 2024 当日

お昼

obakedesuyoneさん、tenbaさん、ngtkanaさんと一緒にランチに行きました。

maps.app.goo.gl

お昼といいつつ、集合時間11時だったのでかなり遅刻しないかひやひやしていましたが、この会のおかげでごはんぬきや決勝に遅刻したりをせずに済みました。

あとご飯も美味しかったです。(おばけさんのお店選び力すごすぎます!)

会場

ふなわさんデザインのTシャツ可愛かったので早速着ました。今年は猫ちゃんいてかわいい!

あとtomoeさんのクリアファイルも可愛いです。名刺ももらってしまいました。家宝です!

 

そして順位表を見ると、去年参加してた方のレートが全体的に上がってて、みんなが強くなっていってるのがすごい嬉しくなったし、今年から参加の強い方も増えてて嬉しくなりました!

去年「今年が最後になるかも」って言ってた子が参加してくれててテンションあがったりしていました。

今年はコンテスト前の時間もかなり余裕を持たせてくれてて、いろんな方に話しかけに行けて楽しかったです。

 

コンテスト

コンテスト直前は一気に静かになって緊張が戻ってきました。

 

A〜D⭕️

序盤はかなり早く解け、Dまで解いた時点だと1位になっていました。

E⭕️

最初誤読をして一人当たりCi円だと思って貪欲で解いてしまい、サンプルを通して間違っていることに気づきました。
焦る中考察ができず順位表を見ると、EをmayocornさんFをdokinさんが通していたので、自分と解ける問題の傾向が近いmayocornさんを信じてそのままEで粘りました。
貪欲の時の影響で人主体で見ていたのを、部屋主体で見るように思考を変えたらDPできるようになり、無事ACできました。

F⭕️

dokinさんがかなり早く通していたのですが、実装が早い方針は浮かびませんでした。

平均値との差分の累積和を遅延セグ木で持ち0以上かを判定して頑張ることにして、ACしました。

G❌

まったくわからず、、とりあえずkを決め打ちぶたんして、構築は貪欲でoxoxoみたいにみるとoに数が大きい順に配置してから、x埋めてくとかいう方針で出してみました。6ケースWA。その後もWAとれずです。。

感想

去年が有志コンぽい問題が多かったのに対して、今年は全体的にABCっぽい問題が増えててかなり楽しく解くことができました。

そして今回特に記憶に残った問題はFでした。

atcoder.jp

dokinさんのFがあまりに早かったのでコンテスト直後に「Fどうやって解いたんですか!?」と聞きにいきました。

自分は1つめの遅延セグ木を使った方針でかなりバグらせながら通したのに対して、dokinさんは2つめの方針をとってかなり早く問題を通していました。

  • 遅延セグ木で平均値との差分(N*Ai-ΣAi)の累積和を管理して、minが0以上になる場所。差分更新して全ての位置を調べる。
  • 平均値との差分の累積和が最小になる位置の隣。

まだまだ考察面で及ばないなというのを強く感じましたし、dokinさんから「セグ木は絶対にバグらせるから使わないようにしている」と聞いて圧倒的強さを感じました。

また、コンテスト後にこの方針について話している際に、chokudaiさんが見にきてくれて「(TopCoder)赤になるまでセグ木はいらなかった。現代だと、データ構造ゲーが増えてきたが、当時はライブラリを持たずに手打ちのみで戦っていたのもあり、セグ木はあまり使わないようにしていた。」という言葉もいただきました。

強い人は考察力のみで解ける問題の幅が広いんだなとより凄さを感じました。

自分もより考察力を身につけていけるように来年まで精進したいです!

表彰

今年は凍結後も動きがあって、凍結時だと2位で表彰台は確定していたのですが心臓バクバクでした。そして4位が発表された時点で、2位ではないことが確定してこっそり凹んでいました。

去年に引き続き3位が取れてとても嬉しいのですが、今年は2位以上を目指していたのでかなり悔しくもあります。

去年からの目標の打倒mayocornさんは達成できたのですが、今年新たに現れたngtkanaさんに負けてしまったので来年は打倒ngtkanaさんです!

懇親会

ご飯が豪華!

前半ご飯を食べるのに夢中になっていました。美味しかった〜
AtCoderの女性スタッフさんが考えてくれたとのことで、感謝の気持ちでいっぱいです。

kenkooooさんとも少しお話しさせてもらえて、「今年は、りんごさんの采配で配点を後半重めにして、順位表凍結後も変動が生じるようにした」と言ったことを聞けました。確かに去年よりも心臓バクバクでした。采配能力が凄腕すぎます。

今年は本業が忙しすぎてスポンサー業務にあまり関わっていなかったのですが、スポンサーとして弊社クイーンが出題した問題が出されており、会場のいろんなところで議論が巻き起こっていました。会場出口のホワイトボードの前でりんごさんも含めて議論されているのをみて、すごい嬉しくなっていました。私まだ解けてなくて困っているのですが。。

女子部オフ会

今年は去年よりも参加者が増えてて、さまざまな方とお話しすることができて楽しかったです。

蕎麦屋さんって蕎麦も美味しいですけど日本酒も美味しいですよね。

tabelog.com

おわりに

来年はもっといい順位取れるよう頑張りたいです!

 

競プロ復帰してから約10ヶ月、黄色復帰するまでにやったこと

はじめに

こんにちは。ももはらです。 ついに黄色復帰しました!

2023/4/8 に競プロ復帰してすぐ青落ちしてから約10ヶ月経ち、2024/2/10にようやく黄色復帰することができました。
この記事では、黄色復帰するまでにどういうことをしてきたのを書こうと思います。
※思い出振り返り的な要素が強いのでどうやったら強くなるかみたいなことは書いてないです。

なぜ競プロをやめていたのか

2022/04/09 ~ 2023/04/08の間、競プロをやめていました。

理由はいくつかありますが、特に強いのは下記2つだと思います。

  1. ARC119で赤パフォをとっており、最高パフォの更新ができなくなったこと
    赤パフォ自体はめちゃくちゃ嬉しかったのですが、それ以降の成績がよくても橙パフォくらいなので、最高パフォ更新はこれから一生なさそうだなという気持ちに。。

  2. コーディング欲が満たされていたこと
    2022/4/1に転職しており、業務でコードを書くようになったので、一時期コーディング欲が満たされていました。 土日までコーディングしなくっていいかという気持ちになる日が増えました。

ので、スコアタ欲的にもコーディング欲的にも微妙になり、やめていました。

なぜ競プロ復帰したのか

ラソンに出てみたらratedの楽しさを思い出しました。

興味本位で2023/04/09のAHC019に出てみたらとても楽しくて、マラソンの知識を勉強したり、解法ツイートを追ったりしてるうちにアルゴの方もrateで出たい!という気持ちが強くなりました。 下記は最初でテンション上がって書いてた参加記です。 momoharahara.hatenadiary.com

競プロ復帰してみて

復帰後2回目のARCで青落ちしてしまったのですがレート変動するのが楽しいし、青落ちすると当然ratedのコンテストも増えるので楽しくコンテストに参加しました。ただ、やはり黄色復帰するには継続的に出ることが重要で、そのためにはモチベーション管理がかなり大切だったと実感しています。
特にモチベが上がったこととして、CodeQUEENと競プロ部設立について書こうと思います。

CodeQUEEN

5月ごろに「CodeQUEENのコンテスト概要に不備がないかどうかのレビューしてくれませんか?」という依頼が来て、CodeQUEENの存在を知りとても素晴らしいコンテストが開催されると思いました。また、かなり競プロ的にブランクがあった自分に依頼が来たことにびっくりしました。
とても楽しみな気持ちに反して、当時はすでに結婚前の挨拶旅行の予定を立てており予選とめちゃくちゃにかぶっていたので、かなり参加を迷っていたのですが、夫が「でたほうがいいよ」と背中を押してくれて、出ることにしました。

6月ごろにはCodeQUEENのスポンサーの話をいただきました。来年も再来年も開催してもらえるように自社に話を出し、スポンサーすることを許可してもらうために頑張っていました。理解のある弊社のおかげで無事スポンサーできて、とてもありがたいです。

7/1の予選は実家に挨拶するために沖縄にいて結構ハードスケジュールの中で出たのですが、意外と調子が良くて決勝進出したメンバーの中で2位の成績を取ることができました。

決勝当日は、集合時間を1時間勘違いしておりかなりギリギリだったのですが、スポンサーとしてスタッフ参加した夫に道を教えてもらって何とか間に合いました。
結果は3位で予選よりも順位下がってしまってかなり悔しかったです。でもこれが結構モチベになっていて、次があったら必ず勝つという気持ちになれました。
また、これまでオンサイトの決勝に出たことはあっても優勝争いなどとは無縁だったのですが、色々な方に応援いただけてとても嬉しかったですし、表彰台に上がって賞金をいただくなどとても貴重な経験ができました。

懇親会では普段見ないような光景が広がっており、色々な方と話せて楽しかったです。決勝の2日前に入籍していたのもあって、かなりの方に結婚を祝ってもらえたのも嬉しかったです。

競プロ部の設立

社内で競プロ部を設立しました。

元々ゆるふわオンサイトなどの開催はしていたのですが、みんな学生時代からやっている方が多く、特に集まって勉強会などはしていませんでした。
そんな中、「週一で何かしたくない?」という声が社内であがり、ちょうど2月のゆるふわオンサイトの運営責任者にもなっていたので、部長をやることになりました。

週一の勉強会などを始めてみて、「コンテストの振り返り」時間をもうけたのが自分のレートにかなり効いているのを感じています。
ネタバレを踏まないためには、土曜日のABCから月曜日の「コンテストの振り返り」時間までに問題を解いておく必要があり、ネタバレ嫌いの自分にとってはかなりの強制力になっています。
また、コンテストの振り返りの中で、自分が問題を感覚的に解く一方で、社内の強い方たちは典型知識や数学的知識を使いこなして論理的な思考のもと解いていて、「再現性の高い解き方」について考えるようになりました。
もっと自分も論理的で再現性の高い解き方ができるようになってパフォーマンスを安定させられるよう頑張りたいです。

おわりに

全然黄パフォ以上が安定しておらず、まだまだ青黄往復するとは思いますが、レート変動を楽しみながら続けていければと思います。
参考: AtCoderRatingContributionGraph

CodeQUEEN 2024 の開催も決まったので、より強くなれるよう頑張っていきたいです!

AHC初参加記&AHC019参加記

はじめに

こんばんは。ももはらです。
今回AtCoder Heuristic Contest 019でAHCに初参加してみたので、記録の意味で参加記を書こうと思います。
高度な知識とかをお求めの方はブラウザバックでお願いします。

環境構築

Rustの勉強もついでにしちゃおうかな?と思ってたので最初にRustをインストールしました

インストールはここから:はじめに - Rustプログラミング言語

AHCは問題文と一緒にツールも置いてあってすごい
ローカル版にテストケースも入ってたので実行してみたりしておお!ってするのをやってました
atcoder.jp

ちなみに結局Web版の方がVisualizeされてわかりやすかったので手元はほとんど使ってません!

問題文を読んでみる

長いです。困りました。
どう取りかかっていいか全くわからないです。
(あと最初めちゃくちゃに誤読していて、ブロックで作る図形が2個じゃなくてN個だと思ってました)

とりあえず困ったのでマラソン自体を勉強するべく記事を漁ったところ、terryさんの記事がひっかかりました。

www.terry-u16.net

AHC001についての記事で、記事に沿って自分も実装してみることにしました。

AHC001の問題概要:いろんな企業が(xi,yi)を含む位置に大きさriの広告を出したい

なんだかAHC019より簡単そうに見えます(2次元ですし)

さっそくブログに沿って次の流れで実装しました

①1*1の豆粒広告をたくさんおく
②ランダムに大きくしてみる
③ランダムにシフトしてみる

あとは、マラソンだと「秒数制限が来たら処理を切る」みたいなのが必要だったのでライブラリ化したりしました。
焼きなましパートは力尽きたのでやれてません(やらなくば)

とりあえず正の得点を得て、貪欲してみて、話はそれからでいいんだなというふんわりした理解を得ました。

いざAHC019に

atcoder.jp

問題概要:正面のからみた絵と真横から見た絵が2組渡されるので、それぞれについてブロックを組み合わせて立体を作りたい。ブロックはできるだけ大きくて少ないほど嬉しい。それぞれでブロックを共有してもいい。

1×1×1配る

提出1

AHC001の経験を生かして?豆粒からです。
3次元なのもあって実装をバグらせまくります。

ようやくできた!と思って喜び勇んで出したらWAが帰ってきます
焦りましたがデバッグ用の出力そのままにしちゃってました
(あと実は数字もずれてました)

98個です

ランダムな2つをペアにする

提出2

ランダムに2つ選んでペアにします

53個まで減りました

ペアにするときに貪欲で大きくする

提出3

今度はペアにするときに大きくしてみようとしました
6方向みて、ペアのどちらも大きくできそうだったら大きくします

52個であまり小さくならないです
強い気持ち出だすとスコア的にはよさそう?ってなります

提出4

バグに気づきます
continueすべきところでreturnしていて、最初の大きくする方向がダメだったときに全て1*1*1で終わっていました

39個になりました

提出5

リファクタして、while文で描いてた部分を再帰にしたり、0-indexで管理できるようにしました
再帰にしたら見え易くはなったのですが、遅くなったことによってかスコア的には落ちたので戻しました

今も必要なブロックにだけおくようにする

提出6

最初に正面から見ても横から見ても1のところに全て置いていたのですが、もう置かれてる列や行かどうかを管理して、
ペア作りでどちらも置かなくていい場合は無視するようにしたり、最後の穴埋めでも置かないようにしました

17個です
一気に減りました

数ケース回して、一番いいやつをとる

提出7

リファクタでだいぶ綺麗になったので、1手戻しもできそうなみためになったので、
5ケース回して、一番スコアがいいものを採用する実装もしてみました

13個です
いい感じです
でもプレテストの合計得点的には下がります(謎)

回転してあわせてみる

提出8

実装が大変そうだったので後回しにしていた回転を実装します

サンプル的には13個で変わらないんですが、3方向だけでもだいぶスコアが低くなり順位上がりました

提出9

3方向でいい感じだったので、頑張って12通り作ります

ついに10個になりました
だいぶいい感じです

1個のものを減らしたい

Nが大きいケースについて考察できてなかったのでseed=97のケースなどでビジュアライズしてみます

いいかんじに22個までは絞ってくれるんですが、1*1*1のやつがめだったりしています

体積2以上の塊になるときしかペアを作れないようにする
→ヒット率が下がるので、処理が周りきらず逆効果

最後に1同士となりあっていたらくっつける候補にして2ずつのペアにできないかを探索する
→ペアの入れ替えがうまくいかずに実装で敗北

という感じでタイムアップしました

結果

システスで321位から311位になりました。
初参加で水パフォでて最初の問題文を見たときの絶望感を考えると思ったより高くて嬉しいです。

感想

AHC初参加でしたが、提出するたびにスコアや順位が上がったり下がったりするのでハラハラして楽しかったです。

イデアが出なくなるよりも先に時間の限界がきてしまったので、次はより時間をとって取り組めるようにしたいですね。
AHCはたくさん出るほどレートが高くなるみたいなので、たくさん参加してレートあげていきたいです!

ここまでお読みいただきありがとうございました。

AtCoderで黄色になりました

はじめに

 こんにちは。ももはらです。
 ついに黄色になりました!!!!

 1983になって黄色リーチになってからだいぶ長かったですが黄色に無事なれてよかったです。
 青になってから思い出深かったことを書いていこうと思います。
 役には立たないですが、暇だったら読んでください。

思い出深い問題

 青になってから最初、なぜか緑diffに苦戦していたので緑diffが多いですが、苦戦した問題を紹介していきます.

パナソニックプログラミングコンテスト2020 D-String Equivalence

atcoder.jp

 まずは、忘れもしないこの問題、、、「やりたいことはわかるが実装できない!!!!」となり、コンテスト時間も迫ってきたので、「気合の10重ループや!!!!」をかきました。

void solve() {
	ll n;
	cin >> n;
 
	ll i0 = 0;
	string s(n,'a');
 
	if (n == 1) {
		cout << s << en;
		return;
	}
 
	REP(i2, 2) {
		s[1] = 'a' + i2;
		if (n == 2) {
			cout << s << en;
			continue;
		}
 
		REP(i3, i2+2) {
			s[2] = 'a' + i3;
			if (n == 3) {
				cout << s << en;
				continue;
			}
			REP(i4, max({ i2,i3 }) + 2) {
				s[3] = 'a' + i4;
				if (n == 4) {
					cout << s << en;
					continue;
				}
				REP(i5, max({ i2,i3,i4 }) + 2) {
					s[4] = 'a' + i5;
					if (n == 5) {
						cout << s << en;
						continue;
					}
					REP(i6, max({ i2,i3,i4,i5 })+2) {
						s[5] = 'a' + i6;
						if (n == 6) {
							cout << s << en;
							continue;
						}
						REP(i7, max({ i2,i3,i4,i5,i6 })+2) {
							
							s[6] = 'a' + i7;
							if (n == 7) {
								cout << s << en;
								continue;
							}
 
							REP(i8, max({ i2,i3,i4,i5,i6,i7 }) + 2) {
								s[7] = 'a' + i8;
								if (n == 8) {
									cout << s << en;
									continue;
								}
								REP(i9, max({ i2,i3,i4,i5,i6,i7,i8 }) + 2) {
									s[8] = 'a' + i9;
 
									if (n == 9) {
										cout << s << en;
										continue;
									}
									REP(i10, max({ i2,i3,i4,i5,i6,i7,i8,i9 }) + 2) {
										s[9] = 'a' + i10;
										if (n == 10) {
											cout << s << en;
											continue;
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

atcoder.jp

 どうしてこんなことに。。。
 てか今数えたら9重ループでした。
 一文字目は流石に賢く処理しててちょっと安心しました(え?)
 ちなみにこの回で入水したんですが、再帰がかけない青コーダーはやばいのでおちて良かったと思います。

ABC161 D-Lunlun Number

atcoder.jp

 前回で何も学んでなかったしupsolveもしてなかったので当然再帰がかけずとけませんでした!
 ルンルンナンバーでまったくルンルンできなかった!!!

 ちなみにこの回はLunlun Numberを切り捨てることで冷えを回避しています。

 流石にこのあと緑diff対策の精進ちょっとしてました。。。

ARC109D-く

atcoder.jp

 この問題もかなり苦い思い出です。
 コンテスト終了18秒後にACしました。

 この問題をきっかけに速度が圧倒的に足りないと感じてえでゅふぉバチャをたくさん走るようになりました。
 後、チョコ食べてた時間なかったら通ってたなーってなったので、コンテスト中にチョコを食べる量を減らしました。ダイエットにも貢献してるかもしれません...

チーム練

harahara

 青になってからちょっとした頃(4月?)に、stoqくんとhanyuくんをお誘いして、ICPC向けにチームharaharaを組むことに成功しました!
 当時は水青青だったのが今は青黄黄ですね。
 チームメイト二人はhighestを1900にのっけている中、1800で停滞してた時期もあったので、追いつけて嬉しいです。
 わりと停滞してた時期は研にも競プロにも苦しんでたんですが、ICPCに出るのだからこんなところで競プロ引退しちゃダメだよなって気持ちで頑張れました。
 や、まじでチーム組んでなかったら引退してたな。ありがとう。。。

 ICPCのセット、いつもとは違うグラフの問題(最大独立集合とかの指数アルゴリズム系?を使う問題)とかも多くて、面白いです。
 構文解析担当になったのもあって、苦手な再帰系の実装もかなり上手くなった気がします。国内予選Dとか構文解析パート以外も楽しくてすきすきです。
 あとはチームメイトに恵まれたおかげで、苦手分野は全部投げて自分の好きな問題を好き放題解いて良いので、チーム練バチャはかなり好きです。
 
 模擬国内とかの参加記です。
はてな

合宿コン

 HUPCとかACPCとか、オンラインチーム戦してとても楽しかったです。
 普段組まない人と組むの楽しいし、1週間で死ぬほど問題解けたのがすごい競プロ週間って感じで満喫できて最高でした。
 ACPC day2でharaharaで9位とれたのかなりうれしかったです。

詳しい参加記です。
はてな

精進内容

 書き忘れてたので書き足します。
 典型知識がとにかくない。実装がやばい!って感じだったので、解説ACもありで埋めてました

  • ABCのC-F埋め

 ABCはとにかく典型問題が多いので埋めとくべきときいたので解説ACもありでがんばりました
 埋まりきってないです。

  • ARC青diff埋め、黄diff埋め

 これ割と楽しいです。昔の問題は今だと典型も多いのでかなり勉強になります。埋まりきってないです。

  • EDPC埋め、TDPC埋め

 これかなりDPの典型を知るのにいいと思います。
 TDPCのT放置してます。

  • えでゅふぉ埋め

 40以降からいいかんじらしいので40からうめてて今45おわりました。
 Contest Maniaとかのサイト使うとかなり捗ります。

  • 蟻本の類題記事

 今中級をやってます。反転?あたりまでやりました。
qiita.com

 飽き性なので、何かに飽きたら別の埋めにうつったり、くじかつに出てみたり、えすえふさんのバチャに出てみたりとかしていました。鬼精進!みたいなのはむいてなくて、精進したい気分の時にいろいろ手出してみる感じでやっています。

まとめ

 黄色になれてめちゃくちゃ嬉しいです。
 黄色維持できるよう頑張りたいです!
 ここまで読んでいただきありがとうございました。