2023-11-01から1ヶ月間の記事一覧

AtCoder Beginner Contest 330 E

https://atcoder.jp/contests/abc330/tasks/abc330_e連続する範囲を葉にする木を作ればいいですが、実装が大変です。ですが、範囲にOrderingの各Traitを実装すればBTreeSetを使えます。範囲が重なれば等しい、そうでなければ大小ということにします。 // Cou…

AtCoder Beginner Contest 330 D

https://atcoder.jp/contests/abc330/tasks/abc330_d縦横でoの数を数えておきます。 // Counting Ls #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_</t:>…

競プロ典型 012

https://atcoder.jp/contests/typical90/tasks/typical90_l典型的なUnion-Findを使う問題ですね。 色々な型に対応できるようにUnion-Findの構造体を頑張って書いてみました。 // Gravy Jobs #![allow(non_snake_case)] use std::collections::HashMap; use s…

MojoでProject Euler 6

https://projecteuler.net/problem=6べた書きするだけですね。 # e006.mojo import sys fn f(N: Int) -> Int: var s = 0 var s2 = 0 for n in range(1, N+1): s += n s2 += n*n return s*s - s2 fn main() raises: let args = sys.argv() let N = atol(args[…

競プロ典型 011

https://atcoder.jp/contests/typical90/tasks/typical90_k単なるDPですが、よくあるパターンで終わりの日でソートします。 // Gravy Jobs #![allow(non_snake_case)] use std::cmp::max; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T</t:>…

MojoでProject Euler 5

https://projecteuler.net/problem=5gcdが使えますね。 # e005.mojo from math import gcd import sys fn lcm(n: Int, m: Int) -> Int: return n // gcd(n, m) * m fn f(N: Int) -> Int: var m: Int = 1 for n in range(1, N+1): m = lcm(m, n) return m fn …

AtCoder Beginner Contest 329 E

https://atcoder.jp/contests/abc329/tasks/abc329_e置き換える順序が大事なのですが、左から順に1文字ずつ合う状態を選んでいくとき、最近M個までの順序だけを覚えておけばよく、さらに上に最新の操作の下に埋もれてしまう操作は意味を成さないので、そこは…

AtCoder Beginner Contest 329 D

https://atcoder.jp/contests/abc329/tasks/abc329_dBTreeSetを使うとよいです。 // Election Quick Report #![allow(non_snake_case)] use std::collections::BTreeSet; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line </t:>…

競プロ典型 010

https://atcoder.jp/contests/typical90/tasks/typical90_j範囲の和をクエリを処理するのに、累積を計算しておいて差を取るという典型的な問題ですね。 // Score Sum Queries #![allow(non_snake_case)] //////////////////// library //////////////////// …

MojoでProject Euler 4

https://projecteuler.net/problem=4この問題はPriorityQueueを速いので、Pythonでこんな感じに書きます。 # e004.py from __future__ import annotations from typing import Iterator import heapq import sys def digits(n: int) -> Iterator[int]: while…

競プロ典型 009

https://atcoder.jp/contests/typical90/tasks/typical90_i1点と取って、その点と残りの点を結ぶベクトルとx軸がなす角度を計算します。そのとき、角度でソートします。そうすると、しゃくとり法的に対角の点を求めることができて、そのうち角度が最大のもの…

AtCoder Beginner Contest 328 F

https://atcoder.jp/contests/abc328/tasks/abc328_fこれもUnion-Findですね。親との差をメモしておくと、元々繋がっている時に矛盾するかチェックできます。 // Good Set Query #![allow(non_snake_case)] use std::cmp::max; //////////////////// library…

AtCoder Beginner Contest 328 E

https://atcoder.jp/contests/abc328/tasks/abc328_e全域木を全て調べればいいのですが、すでに繋がっているのかどうかの判定にUnion-Findを使います。しかし、エッジを取り除くのが難しいので、エッジを追加するときに追加する前の状態を最小限に保存してお…

AtCoder Beginner Contest 328 D

https://atcoder.jp/contests/abc328/tasks/abc328_d双方向リストを作って、ABCが現れたら削除します。 // Many Good Tuple Problems #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String</t:>…

MojoでProject Euler 3

https://projecteuler.net/problem=3Pythonならこんな風に書きたいところです。 from itertools import count import sys def f(n: int) -> int: for p in count(2): if p * p > n: return n elif n % p == 0: return f(n//p) return n N = int(sys.argv[1])…

MojoでProject Euler 2

https://projecteuler.net/problem=2Pythonならこんな風に書きたいところです。 from __future__ import annotations from typing import Iterator from itertools import takewhile import sys def fibs() -> Iterator[int]: a, b = 1, 1 while True: yield…

競プロ典型 008

https://atcoder.jp/contests/typical90/tasks/typical90_h文字列の中の位置とatcoderのどこまで一致したかを状態にして、その状態がいくつあるかをDPで求めます。 // AtCounter #![allow(non_snake_case)] //////////////////// constants ////////////////…

AtCoder Beginner Contest 327 F

https://atcoder.jp/contests/abc327/tasks/abc327_fかごを下から順にあげていきます。そうしてx方向にスキャンします。 入力例1で、かごの上が1のとき、かごの左が1、2、3が考えられますが、そのときのりんごの数は、[1, 0, 0]です。かごを1上げたとき、(4,…

AtCoder Beginner Contest 327 E

https://atcoder.jp/contests/abc327/tasks/abc327_e単なるDPで、を選ぶか選ばないかのときに同じkでRの第1項を記憶しておけばよいです。 // Maximize Rating #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T </t:>…

AtCoder Beginner Contest 327 D

https://atcoder.jp/contests/abc327/tasks/abc327_dとをエッジと考えてグラフを作り、0の隣を1として矛盾が無いか調べます。 // Good Tuple Problem #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mu</t:>…

MojoでProject Euler 1

MojoはPythonのスーパーセットを目指している高速に動作する言語らしいです。 ここを見ると、インストールできます。https://dev.to/jjokah/getting-started-with-mojo-4985WSL2ならスムーズにインストールできます。インストールできたら、Project Euler 1…

競プロ典型 007

https://atcoder.jp/contests/typical90/tasks/typical90_g二分探索で対象の値より小さくても最も大きい値の位置を探します。 // CP Classes #![allow(non_snake_case)] use std::cmp::min; //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -></t:>…