sweet\nsweet
を検索していたのを修正して sweet\nsweet\ns
を検索するようにした。しじ」とか書いてあゅうく‐にち【四十九日】〘名〙 人の死後四九日目に当たる日。また、その日に行う法要。 七七日 。
A-M$N-Z
と並べたなら、(A,N),(B,O),(C,P),...,(M,Z)
のペアを作る(のだと思う)。ロC.flatten!; C[C.size/2..].zip(C)
)。どの解説もそういうペアの作り方をしてるので。どの頂点集合も過半数に届かないようにしているのだから、たしかにそれで同一集合からペアを作ることはないみたい。それと、DFS での頂点の並べ方は帰りがけ順でも OK と解説に書いてあArray#each_cons
がおそらく線形時間を要するせいで TLE を1回出した。たしか以前も同じメソ3 2
という入力例がある。サンプル1のように解説がないし、出力例が実数ではなく 554580198 (mod 998244353)
だということで、途方に暮れていたのが昨日。だけどね、自分で計算すればいいんですよ。昨日の方針だけど、場合の数を K 回数え上げてい3 2
という入力に対しては9通りの出目が2つ続く 81 通りの場合がうまく数えられていれば良か4 4
。これの答えがまた合わなか4 2
に対する 256 通りの数え漏らしを見つけることでサンプルの3もまた合<
を <=
にすると WA が AC にな<
の否定が >=
であるように、そこではイコA = 1,*([2,3,4]*3).shuffle,5; puts A.size,A*' '
に変えたらすぐに見つか最終更新: 2025-03-15T01:11+0900
いつもの前置き:提出先は AtCoder だけど問題は AtCoder の作成ではなく JOI で、だけど競プロカテゴリを意図して AtCoder タグを付けています。
しんどか
4種類の論理演算(! & ^ |
)と、か
クエリを昇順に並べ替えたら、入力値との比較で真偽が決まる関数というのは、一度だけ false から true に値が切り替わる関数になる。更新頻度が (関数の数)×(クエリの数) から (関数の数) に減る。
以上の2つのアイデアというか願望に基づいて最初に書いたのが次の提出
関数を class で置き換えて、そのクラスに演算子を定義して、式全体の評価を eval で行うお手軽な実装。
eval であるか *.rb フnesting too deep (SyntaxError)
というエラp 1^1^1^1^1^...^1
という 1 か 0 を表示するスクリプトをコピペで膨らませて実行すると、Ruby のバ
両極端の例を挙げると、1+2+3+4+5+6+7
という式を [+ [+ [+ [+ [+ [+ 1 2] 3] 4] 5] 6] 7]
と解釈するとき、(1+(2+(3+(4+(5+(6+7))))))
という式を [+ 1 [+ 2 [+ 3 [+ 4 [+ 5 [+ 6 7]]]]]]
と解釈するとき、階層が直線的に増えていく。
中置記法とか
変換アルゴリズムがうまく書けなか
うまく書けなか
これで RE は解消するけど TLE はなくならない。むしろ eval を呼び出してインタ
例えば [1]^[2]^[3]^[4]^[5]
という1つの式があ
更新の伝播を階層ごとに一旦ためておいて、深い階層から足並みを揃えて各項につき1度だけ値を更新しようとした。その過程で更新と更新が重な
演算子の優先順位を考慮して、| ^ &
の順番で、も
たとえば [1]&[2]&[3]&[4]&[5]&[6]
という式なら [& ([1]&[2]&[3]) ([4]&[5]&[6])]
と分割する。
たとえば [1]&[2]&[3]&[4]|[5]|[6]
という式なら [| ([1]&[2]&[3]&[4]) ([5]|[6])]
と分割する。
ところでこの分割は同一階層内でしかできないので、[1]&([2]&[3]&[4]&[5]&[6])
の分割結果は [& ([1]) ([2]&[3]&[4]&[5]&[6])]
になる。か
か
なぜか抵抗があ
「なぜか」
中置記法の式はか
たとえば 1+2+3+4+5+6
を逆ポ1 2 + 3 + 4 + 5 + 6 +
になるのだけど、演算順序をいじ1 2 3 4 5 6 + + + + +
に書き換えたい。
そうすると何が嬉しいか。演算子に由来する階層を取り去[+ ([1]) ([2]) ([3]) ([4]) ([5]) ([6])]
と解釈することが容易になる。次にこれを6項演算として扱うこともできるし、2項演算のまま引数列を半分半分にしていくこともできる、半分半分にするということは、セグメント木のようにきれいで効率的な階層が作れるということ。
正しい方向に向か
たとえば次の式の書き換えを考える。1 2 + 3 + 4 5 6 + + +
。参照範囲が限定できるので予め連続する演算子を結合しておくと便利。1 2 + 3 + 4 5 6 +++
にな1 2 3 ++ 4 5 6 +++
にできる。しかしこれ以上の結合ができない。被演算子もまとめておくとひとつ飛ばすだけで +++
にアクセスできる? だけど 4
という項は 2 2 *
という演算子を含む3項として存在していることもありますね。
対策4とやりたいことは同じなんだけど、今度はうまくできた。演算子に行き当た[op a b]
としてスタa
、b
が単独の値か何らかの演算の結果なのかを調べて可能ならマ
これの 92 行目から 107 行目のあたり。
2K オ
Takahashi
を探したけど、制約を読めば T
を数えるだけでも良か/\b(\d+)(?= \d+ \1\b)/
)、普通に Array.each_cons(3).count{...}
でやるのが良かp2,p3,p4,...,pN (1≦pi<i)
。これでどんな形の木も作れるんだよ。これと同じ考え方で処理を進めていてシンプルにな?
の出番がごく控えめなこと。力技で長さ N の良い文字列を構築していくにあたA
と B
はふるいとしての役割を果たしているのだけど、?
というのは A でも B でもいいという意味だから、ふるいとして働かないことが機能なのだ。注目する部分が間違.sort_by(&:size)
とか書いち