Loading...
2025/02/26
ABCDFの5完でした。これで冷えるのしょっぺぇ...
いい感じに2だけfilterすればOK。ワンライナーで書けて気持ちいです。提出
use itertools::Itertools; use proconio::{input, marker::Chars}; fn main() { input!{ s: Chars } println!("{}", s.iter().filter(|&c| c==&'2').join("")); }
catコマンドみたいなことをします。長さをkeyとしてソートすればOK。これもワンライナーで書けて気持ちいです。提出
use itertools::Itertools; use proconio::{input, marker::Chars}; fn main() { input!{ n: usize,
WWWAがあったとして、これを置換していくとWWAC, WACC, ACCCのように、順に左へと伝播していきます。よって、前から順に見ていって、WAを見つけたらそこからWである間後ろへ置換していく、といったコードでACを得ることができます。
一度後ろまで戻って置換を終えたブロックはそれ以上置換されないことを考えると、書く文字が読まれる回数はたかだか2回であり、の文字列長をとするとでこの問題が解けます。提出
use itertools::Itertools; use proconio::{input, marker::Chars}; fn main() { input!{ mut s: Chars
括弧列典型です。「正しい括弧列」を判定したいとき、開括弧のときはスタックへと加えて、閉じ括弧のときはスタックの最も上の文字が対応する開括弧のときはそれをpop、そうでなければ閉じ括弧をstackへ加えます。全ての操作を終えたとき、スタックが空であれば「正しい括弧列」であると判定できます。 この問題では複数の括弧がありますが、同様の方法でACすることができます。提出
use proconio::{input, marker::Chars}; fn main() { input!{ s: Chars, } let mut stk
確かに知ってさえいれば簡単な典型ですが、昔に類題が出たときは茶色diffだった記憶があるので灰diffまで落ちるのか...と少し驚きです。
ある頂点を根とするアルカンを構築したときに構築可能な最大の大きさはDFSによって求めることができます。これは、ある頂点からは葉の方向に3つ分の辺を選ぶことができますが、そのうち大きい方から3つを取れば良いことから、DFSの帰りがけ時に部分アルカンの最大の大きさを求めることができるからです。 1つの頂点を根とするアルカンの最大サイズを求めましたが、このまま頂点に対して同じことを行うととなり間に合いません。 ここで、差分を取りながら計算をする全方位木DPに持ち込むことによって、全体でとすることができます。ある頂点を根とする有向DFS木を構築して、頂点を移動する際にその向きの有向辺を付け加えるイメージです。詳しくは実装を見ればわかりやすいと思います。提出
use std::cmp::Reverse; use itertools::Itertools; use proconio::{input, marker::Usize1}; fn dfs(g: res g n_g
分からず。[[ABC394E - Palindromic Shortest Path]]にまとめたので、よければぜひ。提出
use std::collections::VecDeque; use itertools::Itertools; use proconio::{input, marker::Chars}; fn main() {