FMC Advent Calendar 2023 22日目

FMC Advent Calendar 2023 22日目の記事です。

21日目は Shota さんのFMC Advent Calendar 2023 21日目でした。

23日目は たむそんさんの 「いいかい学生さん、sub25をな、sub25をいつでも出せるくらいになりなよ。それが、人間過ぎもしない神過ぎもしない、ちょうどいいくらいってとこなんだ。」です。

こんにちは。(挨拶)

普段FMCに取り組んでいる方では初めましてが多いでしょうか、煎茶と言います。
普段は3や3BLDをメインにやっています。

FMCについては11月に開催された綾瀬FMC2023の申し込みをきっかけに始め、BBをやっていました。
せっかく取り組んだFMCのモチベを保とうと思いアドカレに登録をしましたが、12月に入って Speedcubing Advent Calendar のほうであむす式簡易DR(以下、あむす式)の紹介記事が出ていたのでこちらを試しました。
BB歴も短く移行の苦労もないので。

あむす式については以下のブログをご覧ください。

amusucube.blogspot.com

解答

注意事項:
今回のソルブは最初から1時間を超える想定で行い、実際に2時間程度かかっています。これは探索を広く行ってより短手数を目指す意図ではなく、単純に自分がFMCおよびあむす式に不慣れでそもそもこれくらいの時間を要するためです。ご了承ください。

scramble:  R' U' F D B' U' L U B' R U' L2 F2 U2 R2 D' R2 L2 U' L2 B2 F D R' U' F
solution: L' D R' B2 U B' R2 B2 R U R U' L F2 R' B2 R F2 R' B2 R U R' U F L2 R2 B D2 L' B2 R2 U2 L' F2 B2 R' U2 F2 U2 F2 U2 L2 D2 B2 D2 L2 R2 U2 L2 R2 D2
(52手)

L' D R' B2 U // EO (U/D)

B' R2 B2 R          // 4c
U R U' L U R' U' L' // 8c (-3c) 

L U2 F L2 R2 B             // DR (L/R)
D2 L' B2 R2 U2 L' F2 B2 R' // HTR

U2 F2 U2 F2 U2 L2 // FR
D2 B2 D2            // 4e
L2 R2 U2 L2 R2 D2    // finish


skelton: L' D R' B2 U B' R2 B2 R U R U' L * U R' U F L2 R2 B D2 L' B2 R2 U2 L' F2 B2 R' U2 F2 U2 F2 U2 L2 D2 B2 D2 L2 R2 U2 L2 R2 D2
* = [F2, R' B2 R]

カレンダー上で大御所の二人に挟まれている中で大層な記録が出てしまいましたが、振り返っていきます。

振り返り

EO

FB軸で D' F D2 L' B(B'), UD軸で L(L') D R' B2 U(U') を発見しました。

他の方の回答を見ると4手があるようでしたが、残念ながら発見できませんでした。

次ステップがやりやすかった L' D R' B2 U を採用します。

4コーナー

今回あむす式で説いているので、次のステップは4コーナーです。

緑と橙を含むコーナーの配置が良く、残りの緑コーナーも B' R2 B2 R で簡単に入るのでこれで進めます。

あむす式ではHalf Turnのみで完成状態に持っていける配置であればOKなので青コーナーを入れることも一応考えましたが、これは上手くいきませんでした。

このステップではエッジを無視できるので自由度が高いと思いきや、EOで軸になっている面の制約が思った以上に大きくもどかしい気持ちになることが時々あります。

8コーナー

あむす式ではコーナーOLLからのPLL skip(CP skip)を狙いますが、自分は最初に3点交換で完成(とみなせる)状態に持っていけないかを確認します。

今回は残念ながら2点交換 + 1COでした。
4コーナー時点で最初に R をいくら挟んでもよかったので試してみたのですが、すべて2点交換 + 1COに収束してしまいました。

諦めてコーナーOLLを回します。

コーナーOLLを回すと3点交換になっていたのでOKとします。
ただしA-Permは長いので、最終的にコミュテータをインサートすることにして先に進みます。
(回答上ではまだコーナーを完成させませんが、実際は以降のステップのためにA-permで揃えています。)

DR, HTR

数をこなす地力もないので、とにかく完成することを祈ります。

あむす式で紹介されている形へのセットアップ及びDR手順の実行はやるだけなのですが、DR終了後に崩れたコーナーの復元が鬼門になることが多かったです。

コツとして、DRのセットアップの時に必要なQTが0~1に収まること、正しくDRの面に来ていないエッジが1~2個であることを祈ります。
そうでない場合自分の地力ではコーナーが復元できず詰むので、コーナーの作成に戻ったりします。

今回は最初にたどり着いた8コーナーでの運がよく進めることができ、またHTRで揃っていないエッジも2個で最も簡単なパターンでした。

FR

HTR完成後ですが、詰めキューブやBBが下手すぎてなかなか完成状態に持っていけなかったのでFR(Floppy Reduction)を覚えることにしました。

あむすさんのブログからも紹介されていますが kusanoさんのサイト や、FRについてのドキュメント が参考になります。

進め方自体はほぼ選択肢がない(と思う)ので、素直に進めます。

Finish

とりあえずブロックになっている部分を頼りにE層以外を完成させようと思ったら2e2eになりました。 スライスインサートをする体力が残っていなかったのでエッジ交換手順を実行して終了です。

insertion

終了じゃなかった。8コーナーの時に残した3点交換を処理します。

これに関してもキャンセルを見つける体力が残っていなかったので最初に気づいた地点に差し込んで終了です。

まとめ

アドカレ期日までに一応習得・完成まで持っていくことができて良かったです。

あむす式ですが、本当にブログに書かれている方法や手順だけで毎回完成までもっていくのは少し厳しかったです。
というのも、文章中でさらっと流されているところに結構な運や詰めキューブ力を要求される部分があるためです。
(これは自分視点の話であり、逆に言うとあむすさんが持つルートを増やすための探索力や詰めキューブ力がとても高いのだろうと感じました。)

というわけでコーナーを揃えるための試行錯誤を考えたりFRについて学んだりしましたが、この過程であむす式の思想である「DR習得までのハードルを下げる」の恩恵を大きく受けました。
比重の大きいDR, HTRをの理解をいったん最小限でパスできるからこそFRとかに目を通す気力が出ましたし、FRを先に習得することでDRやHTRの雰囲気も最初よりは分かるような気がしました。
(FRのMazeを見た後のHyper-Parity Mazeなど)

総合してあむす式はDRへの橋渡しとしておすすめしやすい解法なのではないかと思いました。何様目線?という感じですが...

おまけですが、8コーナー完成を目指すステップで試行錯誤した際のメモを貼っておきます。リンク

今後は1時間以内にそれなりの回答を出せるようになったり、DR自体も習得できれば良いなと思っています。

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

C#が全く分からない人向け Celeste Code Mod入門: 環境構築編

0. 初めに/ 免責事項

こんにちは。

突然ですが、最近CelesteでFarewellの金苺狙いをしています。Farewellの金苺狙いはあまりにもモチベ管理が大変なので、自分用にEverestを用いてMODを作成しました。

環境構築に戸惑ったので、今後触る方に向けて少しでも助けになればと思い、記事を作成しました。

なお、「C#が全く分からない人向け Celeste Code Mod入門」の続編予定はありません。

この記事ではEverestの仕組みや、Everest APIを使って何ができるかといった説明は行いません。 自作MODを始める最低限のテンプレートを作成し、Everestに読み込ませるところまでを目標とします。

また、自分も「C#全く分からない人」であるため以下の方法で進めることが必ず正解ではありません。自分の一体験としての記録を残すつもりですので、ご了承ください。

環境はWindows / Steamでのインストールを想定したものです。

1. Everestのダウンロード および OpenGLへの切り替え

初めにですが、Steam上で簡単な変更を行います。

おそらくこのページを見ている人はすでにMODで遊んでいる(=Everestをインストール済み)かとは思いますが、起動方式を変更しておきます。(起動方式って呼び方で合っているかな...)

OpenGLという方式で起動する必要があるようです。コードをいじる気がなくても、Everestで遊ぶ場合はこちらを選んだ方がメモリ使用量やクラッシュする頻度が減るため変更しておくことをおススメします。

This setup doesn't require NuGet or git, but if you're a Windows user, you'll need to switch to the OpenGL branch.

参考: Code Mod Setup · EverestAPI/Resources Wiki · GitHub

変更方法

  • SteamライブラリのCelesteを右クリック → プロパティ

  • 「ベータ」 → openglを選択

プルダウンで選択した時点で変更が始まります。アクセスコードは入れなくて大丈夫です。
こうなっていたら大丈夫です

openglへ変更をすると、Everestを再度入れ直す必要があります。

普段通りOlympusからEverestを起動しようとするとインストールを求められると思うので、指示に従って進めてください。 セーブテータやMODは保持されているので大丈夫です。

説明についてはこのへん

2. Visual Studioのダウンロード

まずは .NETをインストールします。 docs.microsoft.com

次に、Visual Studioをインストールします。恥ずかしながらEverestを触ろうと思うまで自分も混同していたのですが、Visual Studio Codeとは別物です。 無料のCommunityバージョンでOKです。

visualstudio.microsoft.com

これ以降のVisual Studioについての説明は、おそらくバージョンが変わっても同じになるかとは思いますが自分がインストールしたバージョンは17.2.4でした。

Visual Studioのインストールが完了したら一回閉じておいて大丈夫です。

3. 自作MOD用のテンプレート作成

まずは、作成したMODを入れる空のフォルダ(ディレクトリ)を作成します。 Celesteに関連したファイルがどこに保存されているかは先ほどと同様にSteamから辿ることができます。

「ローカルファイルを閲覧」

Steamからプレイしている場合、おおよそ C:\Program Files (x86)\Steam\steamapps\common\Celeste のような場所にあるかと思います。

Mods フォルダの中に好きな名前で新しいフォルダを作成してください。

そうしたら先ほどダウンロードしたVisual Studioを起動し、空のMod用ファイルを開きます。

「ローカル フォルダーを開く」

開いた直後はこのようになっていると思います。「開発者用PowerShell」が見えない場合は、ウィンドウ上部の「表示」タブ→ 「ターミナル」で出してください。

PowerShell上で dotnet --version などを実行し、dotnetコマンドが使えるかどうかを確認します。

dotnetコマンドが使えない場合は、

winget install Microsoft.DotNet.SDK.7

でインストールします。指示に従って進めてください。
(注: 現在(2023/3)ではバージョン7が安定バージョンとなっていますが、今後新しいバージョンがリリースされると .7 の部分が変更になるかと思います。)

参考: Windows に .NET をインストールする - .NET | Microsoft Learn


dotnetコマンドが使えることを確認したら

dotnet new install CelesteMod.Templates

でテンプレート作成用ライブラリをインストールしたのち

dotnet new celestemod

を実行します。

必要なファイルが作成され、先ほど作成した空のフォルダが以下のようになっていれば成功です。

注: この時点でEverestを起動するとエラーになります。
正常に起動させるには次の「4. デフォルトの状態でビルド」節までの作業を完了するか、作業を途中で取りやめる場合は作成したフォルダ(例の場合は「MyTestMod」フォルダ)を丸ごと削除し、次回作業時に「3. 自作MOD用のテンプレート作成」節の最初からやり直すことをお勧めします。

4. デフォルトの状態でビルド

補足および謝罪

Mod作成時のメモに「初回ビルド時にDeveloper Toolがないと怒られたのでインストールした」と書かれていたのですが、3ヶ月くらい前のメモであるのと今になって再現できないので、割愛させてください。
おそらく何が足りないかがエラーメッセージなどに現れると思うので、適宜対応していただければと思います... 🙇‍♂️
もしも思い出したり再現できたら書きます。




気を取り直して...

Visual Studioを開いたばかりの状態ではメニューバーにないのですが、.sinファイルを開くと「ビルド」が表示されるようになるので(??)開きます。

① 「表示」 → 「ソリューションエクスプローラー」② 「(自分の作成したフォルダ名).sin」をダブルクリック

メニューバーの「ビルド」→「ソリューションのビルド」を実行します。

しばらく待つとウィンドウ左下に「ビルド正常終了」が表示されます。

ビルドが正常に終了すると、テンプレートで作成された bin フォルダの中にdllファイルが作成されます。
ここまで完了するとEverestを起動し自作したMODを読み込ませることができます。

ゲーム開始画面の「MOD設定」→「MODを有効化・無効化する」

5. おわりに

お疲れさまでした。ここまでうまく運べば、以降は公式リファレンスとコードとの対応付けを確認したり、Everest上での動作を見ることができるので少しは進めやすくなるかなと思っています。

公式リファレンスはそこそこ充実していますので、やりたいことに合わせて探索していただければと思います。

github.com

また、GameBananaなどで公開されているMODはGitHub上でコードが公開されていたりもしますので、自分がやりたいことと近いものがあれば覗きに行くのもよいかと思います。

自分もまだまだModのさわりしか分かっていないので、もし今後知識が増えたら続編として書こうかなと思っています。

それではまた。

Notionで3-styleを管理する試み

こんにちは、1年ぶりになります。
煎茶と申します。

この記事は Speedcubing Advent Calender 13日目の記事になります。

adventar.org

前日分はノムノム さんによる 「パリティ回すのが楽しくなる!パリティ回してる間に読めることがたくさんある! 読まないともったいない!」
翌日分はyukiさんによる 「いつのも大会ができなくなってもう2年が経ちますね」
になります。

今回は、タイトルのまとまりのなさから察されてしまうかもしてないのですが「とりあえずここまでやってみた」系の記事です。
3-styleを一通り習得するまでの辛さやマンネリをなんとかしたい!という思いから生まれたアイデアをとりあえず共有したくなって、アドカレの場を借りさせていただきました。

また、めちゃくちゃ宣伝なのですがもしよろしければ過去のSpeedcubing Advent Calenderに投稿させていただいた以下の記事たちもご覧ください。(主催の荒木さんいつもありがとうございます。)

2019:
UFRバッファ入門 - socha77’s blog
2020:
ルービックキューブにおけるGod's Number解明までの歴史 さわりだけでも理解したい! - socha77’s blog

はじめに

3-style、覚えるの難しくないですか???

3-styleは主に目隠しでのソルブに使われる手順なのですが、
- 人によって好みの手順がまちまち
- 手順数が多すぎるので脳内だけでは管理しきれない(はず 一般人では)

といった理由から自分用に整理した手順集をドキュメントとして公開している人が結構います。

対象となるステッカー1個目と2個目の組によって回す手順が決まるためGoogle Spreadsheetを使った表形式で共有されることが多いです。

f:id:socha77:20211212231921p:plain
Graham Sigginsの手順表から引用(https://docs.google.com/spreadsheets/d/1-AnKGJMHN3SAOcZxem3XJ5tBm7Dk1dTRcZ7KcXYbGP4/edit)

世界のBLDerの手順表は以下のページによくまとまっています。
BLD tables/algorithms collection

ただ標準的な管理方法となったこの形式ですが、見ながらずっと練習してると飽きてしまうなあと思うことがありました。

基本的に呪文に近い文字列の羅列なので目が参ってしまうし、表がでかいので今回している手順(セル)がどのステッカーの手順(表の何行何列)なのか が分からなくなってきてしまうんですよね。

最終的には hinemos を使って1日1週するのが最強だと思うのですが、これは一通り手順を回せるようになった人向けなので、3-style練習の入り口に立っている時点では結局スプレッドシートとにらめっこすることになります。結構苦しいのではないでしょうか。(実際苦しかったです。)

というわけで、そういった状況に対する提案の一つとして別の形で手順表を作成してみました。

Notion上の手順表

作成したものが以下になります。 Notionというサービスを使っています。

全体公開にしているので以下のリンクから見ることができます。 https://www.notion.so/71395fd7cff44ad99d4a45bde9327999?v=11cf6925135f420ba4960e9b2cc175c0

f:id:socha77:20211212223853p:plain
こんな感じです

この表の大きな特徴として、ソートやフィルタリングを活用することで色々な視点で手順を整理することができます。
ためしにいくつかカスタマイズで設定してみました。左上のメニューから選択することができます。 f:id:socha77:20211212223118p:plain

また、このページはただの表ではなく、それぞれの行が詳細ページへのリンクになっています。マウスオーバーをして「OPEN」をクリックすることで詳細ページを見ることができます。
(今回は例なので、[U' R : [B2 , R' D R D']] のページだけ中身を作っています。) f:id:socha77:20211212224002p:plain

Notion管理のいいところ

Notionで3-style管理に良さそうな特徴として、ざっくりと以下の4つがあります。 (すでにこの記事の中で言ったことと被っていますが)

ネット上で共有が可能

上に貼ったように共有用のURLを発行して公開することができます。なのでgoogleスプレッドシートと同じくらいの気軽さで共有、閲覧ができます。
スマホからだと個人的にNotionのほうが見やすそう。

また編集権限を設定することができるので、知らない人に手順表を破壊される心配なく公開ができます(設定はちゃんとやる必要があります)。

プロパティを設定してソートや絞り込みが可能

それぞれの手順にプロパティ (対象のステッカー、手順のうちピュアコミュテータ部分を抜粋したものなど) を設定することで、ソートや絞り込みを行うことができます。

f:id:socha77:20211212225237p:plain f:id:socha77:20211212225250p:plain

プロパティは自由に追加できるため、例えば自分の得意度やregripのあるなしなどを記入してフィルタリングをしてもOKです。

各手順に細かいメモなどの記入が可能

DBの各行は実体が1手順につき1つのページになっており、各手順に対するメモなどを記入することができます。   (「OPEN」で開くページです)

回し方のコツやレターペアのイメージ画像といった補足情報を蓄積していくことでDBを育てていくのも面白いのではないでしょうか

スクリプトにより自動的に作成

ここが今回Notionに目を付けた1番の理由となります。

3-styleはコーナー/エッジ合計で818手順あるため、手動で入力しようとすると数日がかりになりますしミスもします。
しかしNotionが提供してくれている機能のおかげでこちら側でプログラムを組むことにより機械的にデータを登録することができます。 今回例として公開しているDBのプロパティは全て自動で作成しており、やろうと思えば各手順の詳細ページにも手を加えることができます。

終わりに

というわけで、「Notionで3-styleを管理する試み」でした。
本当は自分以外のBLDerの皆さんにも試してもらえるようツールを公開したかったのですが、色々と間に合いませんでした... (ある程度形になったら公開したいと思っています)
今までと変わった視点からの練習方法を考えるきっかけにでもなれたら嬉しいです。

(本音は全く手順を回せなくなったのになんとかしがみついている感出したいマンなので、何とか復帰したいところです)

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

AWSでKali Linux入りのEC2を起動してCloudWatch Agentを仕込む

はじめに

今回Kali Linuxをはじめて触ってみたいと思ってちょっと調べていました。

手元にサブPCやサーバを用意するのが一般的かと思いますが、AWS上でも建てられるということを知りこちらを試すことにしました。

訳あってCloudwatchへログを転送したいと思ったのですが、設定中に少し詰まるところがあったので備忘録としてEC2作成からログ転送完了までの流れを記しておくことにします。

作業の流れ

大体の部分はCloudWatchでログ監視みたいな文脈で調べると出てくる手順とほぼ同じかと思います(今回の作業でもそう調べて従っているので)。

エージェント導入に関して参考にしたのはここ。
クイックスタート: 実行中の EC2 Linux インスタンスに CloudWatch Logs エージェントをインストールして設定する - Amazon CloudWatch ログ

EC2は作成済みの前提で進んでいますが、その辺りは色々な場所で解説されているので割愛。
少し普段と変わっている部分だけ次の節で補足します。

EC2の作成(補足)

Kali LinuxのAMI選択

インスタンス作成で一番最初の画面で、"Amazon MarketPlace"を選択 -> ”Kali”などで適当に検索

Kali LinuxのイメージはEC2インスタンス自体の料金に加えて、イメージ作成者へのサブスク料金が必要になります。

が、あってないような値段なのであまり問題にはならないと思います。
(AMIイメージの選択時に料金表が出てくるので確認してみてください。)

f:id:socha77:20210922152426p:plain

f:id:socha77:20210922152436p:plain

セキュリティグループの設定

Webサーバーではないので、自PCからのSSHだけ許可しておけばいいと思います。

f:id:socha77:20210922152903p:plain
「マイIP」で今コンソールを開いているPCのIPアドレスを指定できるということをこの前教えてもらって初めて知りました

ログイン

ログインユーザー名が ec2-userではなくkaliになっています。そこだけ注意

$ ssh kali@{EC2インスタンスのアドレス} -i {秘密鍵へのパス}

ログ転送などをする必要がなければここで終了です。

インストール用スクリプトの取得、修正

先ほどの公式導入ガイドに従っていきます。

AmazonLinux2であれば "sudo yum install -y awslogs" で済むところですが、
yumが入っていないのでドキュメント上「既存の Ubuntu Server、CentOSRed Hatインスタンスに CloudWatch Logs をインストールして設定するには」の部分に沿って行きます。(どれでもないのですが)

$ sudo apt-get update
$ curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O

ここで本来はawslogs-agent-setup.pyを起動するところですが、Kali Linuxに対応していないためエラーとなります

$ sudo python ./awslogs-agent-setup.py --region us-east-1
Launching interactive setup of CloudWatch Logs agent ...
ERROR: Failed to determine linux distribution. Exiting.

pythonスクリプト中で現在のLInuxディストリビューションを推測しデフォルトのシステムログの場所を指定する処理があるようなのですが、推測対象の選択肢にKaliが入っていないためエラーを吐かれているようです。

というわけでawslogs-agent-setup.pyに数ヶ所追記します。

なお、以下にある画像ではdiffの表示のためにローカルに落としたコードをVSCodeで表示していますが、実際の作業の際にはインスタンス内で使える各種エディタで編集をしてください。

修正箇所1

enumっぽく定義されている定数にKaliを加えます。
・Kaliではパッケージインストーラにapt-getを使っているのでその旨を指定します。

f:id:socha77:20210922141900p:plain

修正箇所2

ディストリビューションを推定する部分でKaliを発見できるようにします。
推定には /etc/issue の中身を見ているようで、Kali Linuxでは(?) "Kali GNU/Linux Rolling" と書いてあります。 f:id:socha77:20210922142015p:plain

修正箇所3

・もう一ヶ所、有効なディストリビューション一覧にKaliを追記します。

f:id:socha77:20210922142112p:plain

全然改行されていないせいで見えなくてすみません。末尾がこうなります。 f:id:socha77:20210922142213p:plain

修正箇所4

・最後に、システムログの場所を指定する分岐に追記します。 Kaliの場合は /var/log/syslog のほうのようです。(間違っていたらすみません)

f:id:socha77:20210922145127p:plain

f:id:socha77:20210922145111p:plain

以上でソースの修正は全部になります。
以下のリンクなどの情報を参考にしながら、"AmazonLinux" でファイル内検索をして修正箇所のあたりを付けていました。

VAL の LABO: CloudWatchのログ蓄積とモニタリングを使ってみる(その1)

Kali-Linux AMI & AWSLogs. Today we had to build a Kali Linux AMI… | by Netscylla Cyber Security | Medium

インストール ~ 起動

ここまでくればおそらくCloudWatch Agentを入れることができます。

# regionの設定はよしなにお願いします。
sudo python ./awslogs-agent-setup.py --region us-east-1

対話形式での各種設定が終わったらそのまま起動をすることができます。
ただし、公式マニュアルのほうにはenableが書いていないので注意してください。

$ sudo systemctl enable awslogs 
$ sudo service awslogs start    

CloudWatch Logsのほうでシステムログを見ることができると思います。  

もしも表示されない場合はIAMロールの設定なども見直してみてください。

おわりに

クラウド便利だな~と思って軽い気持ちで始めたところ詰まってびっくりしてしまいましたが、無事にいってよかったです。

特に目的があって始めたわけではなくなんか面白そうだなくらいの気持ちなのですが少しずつKali Linuxの機能を触っていけたらなと思います。

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

RECRUIT 日本橋ハーフマラソン 2021〜増刊号〜 参加記

はじめに

今回初めてAtCoderヒューリスティックコンテストに参加しました。
ほぼ日記なので解法とかの話はほぼないです すみません

問題

atcoder.jp

結果(pretest時点) f:id:socha77:20210912185821p:plain

f:id:socha77:20210912185839p:plain

実装

github.com

続きを読む

ABC194-E Mex Min の嘘解法

たまにはこういう記事があってもいいかなって

注意書き:
・「嘘解法」は定数倍高速化や強いデータ構造などで意図的に想定解法でない計算量を通したというわけではなく、
あまり証明などせず投げて通ったが、テストケースの緩さに甘えたという意味になります。
・つらつらと解いてる最中および振り返り中の思考を書いているだけなので、最終的に「TLEでした」というオチになります。
これ、もしかして嘘解法だったのではないか?というモヤモヤ解消のための自己満足であることをご了承ください。

問題概要

長さNの数列Aと整数Mが与えられる。
元の数列から取り出すことのできる長さMの連続部分列は N-M+1 通りあるが、そのすべてに対してMexを求めたときの最小値を求める。

制約

  • 1 <= M <= N <= 1.5 * 106
  • 0 <= A_i < N
  • 入力はすべて整数

atcoder.jp

続きを読む

エイシングプログラミングコンテスト2021 E - Count Descendants 復習

あらすじ

E - Count Descendants

本番で解けなかったけどオイラーツアーとマージテクについての理解が深まったので良かった

問題概要

N頂点の木が与えられる。
Q個のクエリに答える。
クエリ: 「根(頂点1)からの距離がDかつ根への最短経路に頂点Uが含まれるような頂点はいくつあるか。」

この記事では、詳細な解説は公式解説に任せ、コンテスト中及び解説を見た後に考えたことの覚書を書いておきます。
自分以外に伝わりづらい表現、正確でない表現があらわれるかもしれませんがご了承ください。

続きを読む