elphe's Avatar

elphe

@elphe.bsky.social

自称競プロer/大学生 AtCoderにて水色コーダーとして活動中(https://atcoder.jp/users/elphe) アルゴリズム・データ構造が中心の独り言ばっかりになりそう

23 Followers  |  27 Following  |  457 Posts  |  Joined: 11.01.2024  |  1.7934

Latest posts by elphe.bsky.social on Bluesky

最近、僕に熱心に電話をかけてくれる人がいるみたいだけど、基本的に僕は
・寝ている
・大学の講義室で授業を受けている
・大学の図書館にいる
・バス/電車の中にいる
・食事/入浴している
・AtCoderコンテストに参加している
のいずれかだから、ほとんど電話には出られないよ!

用事や連絡があるならDMやメールなどの非同期コミュニケーションだったら基本的に対応するよ!

14.11.2025 04:33 — 👍 3    🔁 0    💬 0    📌 0

今日大学休みなのに大学に来てしまった……

14.11.2025 00:53 — 👍 1    🔁 0    💬 0    📌 0
Preview
Submission #70890917 - AtCoder Beginner Contest 430 AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp/contests/abc...
解決した
rを強制的にn以下に留めてたせいで「これより右ならどこをとってもいい」の処理がうまくできてなかったのが原因だった

12.11.2025 14:52 — 👍 0    🔁 0    💬 0    📌 0

これでもなかった
えぇ…?

12.11.2025 14:35 — 👍 0    🔁 0    💬 0    📌 0

気づいた
めちゃくちゃ尺取り法の大事なところで間違えてるやんけ!

12.11.2025 10:36 — 👍 0    🔁 0    💬 1    📌 0

見つけたと思った間違い、別に考慮してなくても影響はゼロだから関係ないわ……
じゃあどこが間違ってるんだ?

12.11.2025 10:30 — 👍 0    🔁 0    💬 1    📌 0

簡単な尺取り法もまともに書けなくてやや悲しい(間違いは既に多分見つけた)
atcoder.jp/contests/abc...

12.11.2025 10:15 — 👍 0    🔁 0    💬 1    📌 0
Preview
Submission #70876709 - AtCoder Library Practice Contest AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

Rustでセグ木、ようやく書けた!
実装方法はac-library-rsをパk、参考にした
struct SegmentTree<T, const DEFAULT: T, const OP: Fn(T, T) -> T>とは定義できないから、このジェネリック引数たちをトレイトに押し込んで、使うときにこのトレイトを実装した構造体を定義するようにすればよかったんだな

試運転も良好!
atcoder.jp/contests/pra...

12.11.2025 02:33 — 👍 3    🔁 0    💬 0    📌 0

Rustでセグメント木を書こうとしたら、コンパイルエラーに阻まれて書きたいように書けない……
Rust難しくないですか

11.11.2025 23:22 — 👍 5    🔁 0    💬 1    📌 0

( -`ω-)✧フッフーン(他人のライブラリの使い方を読解する能力がないから自分で作ってるなんて言えない……)

09.11.2025 10:21 — 👍 1    🔁 0    💬 1    📌 0
mod mylib {
    pub struct UnionFind {
        root_of: Vec<u32>,
        size_of: Vec<u32>,
        groups: u32,
    }

    impl UnionFind {
        pub fn new(size: u32) -> UnionFind {
            UnionFind {
                root_of: (0..size).collect::<Vec<u32>>(),
                size_of: vec![1; size as usize],
                groups: size,
            }
        }

        fn search_true_root_of(&mut self, index: u32) -> u32 {
            if self.root_of[index as usize] != index {
                self.root_of[index as usize] =
                    self.search_true_root_of(self.root_of[index as usize]);
            }
            self.root_of[index as usize]
        }

        pub fn is_connected_between(&mut self, a: u32, b: u32) -> bool {
            self.search_true_root_of(a) == self.search_true_root_of(b)
        }

        pub fn merge(&mut self, a: u32, b: u32) -> bool {
            if self.is_connected_between(a, b) {
                false
            } else {
                let (root_of_a, root_of_b) = (self.root_of[a as usize], self.root_of[b as usize]);
                self.size_of[root_of_a as usize] += self.size_of[root_of_b as usize];
                self.root_of[root_of_b as usize] = self.root_of[root_of_a as usize];
                self.groups -= 1;
                true
            }
        }

        #[allow(unused)]
        pub fn size_of_group_with(&mut self, index: u32) -> u32 {
            let root_of_index = self.search_true_root_of(index);
            self.size_of[root_of_index as usize]
        }

        #[allow(unused)]
        pub fn count_groups(&self) -> u32 {
            self.groups
        }
    }
}

mod mylib { pub struct UnionFind { root_of: Vec<u32>, size_of: Vec<u32>, groups: u32, } impl UnionFind { pub fn new(size: u32) -> UnionFind { UnionFind { root_of: (0..size).collect::<Vec<u32>>(), size_of: vec![1; size as usize], groups: size, } } fn search_true_root_of(&mut self, index: u32) -> u32 { if self.root_of[index as usize] != index { self.root_of[index as usize] = self.search_true_root_of(self.root_of[index as usize]); } self.root_of[index as usize] } pub fn is_connected_between(&mut self, a: u32, b: u32) -> bool { self.search_true_root_of(a) == self.search_true_root_of(b) } pub fn merge(&mut self, a: u32, b: u32) -> bool { if self.is_connected_between(a, b) { false } else { let (root_of_a, root_of_b) = (self.root_of[a as usize], self.root_of[b as usize]); self.size_of[root_of_a as usize] += self.size_of[root_of_b as usize]; self.root_of[root_of_b as usize] = self.root_of[root_of_a as usize]; self.groups -= 1; true } } #[allow(unused)] pub fn size_of_group_with(&mut self, index: u32) -> u32 { let root_of_index = self.search_true_root_of(index); self.size_of[root_of_index as usize] } #[allow(unused)] pub fn count_groups(&self) -> u32 { self.groups } } }

とりあえずRustで自作のUnionFindを書いてみた
(英語力がないので関数名が…)

09.11.2025 09:16 — 👍 5    🔁 0    💬 1    📌 0

ABC431おわりっ!18分11秒でABCD問題をノーペナ4完!

A問題はmax(H,B)-Bが答え

B問題はフラグの配列をもっておいて、加算か減算か決める

C問題はそれぞれをソートして、軽い方の頭から対応する体を決める
対応する体は、極力軽い体を選ぶ貪欲法でOK

D問題はナップサックDP
つまるところ、全体の重さの半分以下を頭部に持ってこれるので、全体の重さの半分をナップサック耐久度としてナップサックDPを行えばよい

E問題はなぜか合わない
マス(i,j)から方向dに光が出たときの答えを01BFSで順次求めていけば良さそうになったけど、サンプルが通らない

F問題まったくわからん

08.11.2025 13:47 — 👍 5    🔁 0    💬 0    📌 0
Preview
Submission #70745591 - AtCoder Beginner Contest 430 AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp/contests/abc...

(Rustでは)人生初AC!!!!

08.11.2025 02:38 — 👍 5    🔁 0    💬 1    📌 0

さっきたまたまAtCoderのコンパイルコマンド確認しに行ったら、C++のコンパイルコマンドがとんでもないことになっててびっくりした
大半はインクルード指定のオプションだったけど、よく見るとfconstexpr系のオプションに渡される値が大幅削減されてた(元々の値がデカすぎた)

08.11.2025 00:44 — 👍 3    🔁 0    💬 0    📌 0

この図、大変よくないと思う
誰でも累積和とるってこんなん

07.11.2025 01:04 — 👍 1    🔁 0    💬 0    📌 0
四条駅からの所要時間表

四条駅からの所要時間表

四条駅から松ヶ崎駅まで2+4+6+8+10+12+14=56分!?市営地下鉄にしては長すぎやろ!!
(実際は四条駅から松ヶ崎駅までで14分)

07.11.2025 00:41 — 👍 2    🔁 0    💬 1    📌 0

Stringと&strの区別がある時点でなかなかヤバいですよね……

あと、この記事では触れられてませんが、Rustの文字列型は添字アクセスできないというのも衝撃でした
C++もpythonも添字アクセスできたのに……

06.11.2025 15:57 — 👍 2    🔁 0    💬 1    📌 0

とりあえず「The Rust Programming Language 日本語版」を5日で1~16章まで読破したけど、かなり苦しいぞ……
特に後半になるほど失速してるので、読み終えるのはいつになることやら……

06.11.2025 14:18 — 👍 3    🔁 0    💬 0    📌 0

Rust言語を勉強してるけど、だいぶ難しい〜

04.11.2025 11:03 — 👍 4    🔁 0    💬 0    📌 0

ExtraのG問題は、ナップザック問題の動的計画法をベースとしてもう一歩工夫できるかを問う問題でした!

もともとDiv.2収録予定で話が進んでいたのですが、僕含め全会一致でこの問題が最難と評価され、Div.2の難易度が全体的に高めだったのでExtra送りになりました
なので、他よりテスターさん多めです

03.11.2025 10:17 — 👍 0    🔁 0    💬 0    📌 0

Div.1のB問題は、岩井星人さんが大量のWAに襲われるというコンセプトで作問しました!サンプルケースでも岩井星人さんがひどい目にあってます

完全オリジナルのつもりだったのですが、ほぼほぼAnother String of yuusaanのパクリだったようですね……
ちょっとだけ進歩性があるということで許して……

03.11.2025 10:17 — 👍 0    🔁 0    💬 1    📌 0

第2回 岩井星人アンソロジープログラミングコンテストにご参加くださった皆様、ありがとうございました!
初作問にしてDiv.1のB問題とExtraのG問題のwriterを担当させていただきました!
用事が重なってしまい、皆様と興奮をともにすることはかなわなかったのですが、不備なく終えられてよかったです!

03.11.2025 10:17 — 👍 1    🔁 0    💬 1    📌 0

僕のコーディングスタイルもRustに大きく影響を受けてるし、そろそろRustに移行しようかな
ライブラリ自作勢なので標準ライブラリが最小限でもあまり困らなそうだし

02.11.2025 10:47 — 👍 3    🔁 0    💬 1    📌 0

すごい、幻想的だ……

02.11.2025 07:48 — 👍 1    🔁 0    💬 0    📌 0

嫌だ、日常に戻りたくない!

02.11.2025 03:25 — 👍 1    🔁 0    💬 0    📌 0

麓に雲がかかってるとかめっちゃかっこいいじゃん

02.11.2025 01:36 — 👍 2    🔁 0    💬 0    📌 0
富士山A

富士山A

富士山B

富士山B

富士山C

富士山C

富士山D

富士山D

デッキに立ち乗りしていて周りに人がいないので、これでもかと言うほど富士山を撮りまくった

02.11.2025 01:34 — 👍 5    🔁 0    💬 1    📌 0

新幹線、3時間座り続けるのはグリーン席でもキツかったので、帰りは立ち乗りする(車掌さんにもデッキならいいよって言ってもらった)

02.11.2025 01:04 — 👍 1    🔁 0    💬 0    📌 0

!?
合流してから帰ればよかった……

02.11.2025 00:48 — 👍 1    🔁 0    💬 0    📌 0

09:42発と10:42発の便を見間違えて新幹線逃すところだった
何で1時間後の便が既に電光掲示板に表示されてんすか

02.11.2025 00:47 — 👍 1    🔁 0    💬 0    📌 0

@elphe is following 18 prominent accounts