2023-05-19 具だくさんの味噌汁 / 違国日記 / PAST #2 G を解いた
母はみそ汁を「具だくさん」と言うが、それよりも汁が少ない。
https://iris.to/note10gyrjdpdy22a5r5agy3ns05qm4yr5gas5hzxghyln7wnn458a7ps6vdyyy
『違国日記』を毎日 1 話ずつ読んでいる。漫画は時間あたりのコストが高いので毎日すこしずつ読むと得な感じがする。一気に読みたくなるけど我慢する。
- PAST #2 G - ストリング・クエリ (第二回 アルゴリズム実技検定 G問題)
https://atcoder.jp/contests/past202004-open/tasks/past202004_g
- https://atcoder.jp/contests/past202004-open/submissions/41518193
- だいたい指示通りに操作すれば良い
- 個数はそのまま管理する、たとえば c を x 個追加しろと言われたら
(c, x)
を追加し、c
をx
回追加するようなことはしない、間に合わなくなる - あとは前からも後ろからも操作できる deque を使う
use std::collections::VecDeque;
use proconio::input;
fn main() {
input! {
q: usize,
}
let mut s = VecDeque::new();
for _ in 0..q {
input! {
t: usize,
}
match t {
1 => {
input! {
c: char,
x: usize,
}
s.push_back((c, x));
}
2 => {
input! {
d: usize,
}
let mut sum_x = 0_usize;
let mut count = vec![0_usize; 26];
while let Some((c, x)) = s.pop_front() {
sum_x += x;
if sum_x < d {
count[(c as u8 - b'a') as usize] += x;
} else {
let y = sum_x - d;
count[(c as u8 - b'a') as usize] += x - y;
s.push_front((c, y));
break;
}
}
let ans = count.iter().fold(0_usize, |acc, x| acc + x * x);
println!("{}", ans);
}
_ => unreachable!(),
}
}
}
今日のコミット。
- tsukota 1 commit
- rust-atcoder 1 commit