2023-09-19 bouzuya/serde-firestore-value / ABC076 A, B, C を解いた
bouzuya/serde-firestore-value をつくっている。 ふと serde で firestore の Value 型に serialize してみようと思い、試している。 crates:serde の勉強みたいな何か。
ABC076 : AtCoder Beginner Contest 076
- A - Rating Goal
https://atcoder.jp/contests/abc076/tasks/abc076_a
- 提出: https://atcoder.jp/contests/abc076/submissions/45734208
 r + (g - r) * 2
 - B - Addition and Multiplication
https://atcoder.jp/contests/abc076/tasks/abc076_b
- 提出: https://atcoder.jp/contests/abc076/submissions/45734258
 x = (x * 2).min(x + k)を n 回繰り返す
 - C - Dubious Document 2
https://atcoder.jp/contests/abc076/tasks/abc076_c
- 提出: https://atcoder.jp/contests/abc076/submissions/45734485
 |S| < |T|ならUNRESTORABLE- S のどの位置から T がはじまるかをすべて試せばよい
 - 条件1を満たさなければ次の位置へ
 - 条件1を満たした場合は辞書順最小なので 
'?'を'a'にして埋める - 制約が小さいので開始位置すべてを試してすべて保持しても間に合う
 
 - D - AtCoder Express
https://atcoder.jp/contests/abc076/tasks/abc076_d
- 未着手
 
 
use std::collections::BTreeSet;
use proconio::{input, marker::Chars};
fn main() {
    input! {
        s: Chars,
        t: Chars,
    };
    let n = s.len();
    let m = t.len();
    if n < m {
        println!("UNRESTORABLE");
        return;
    }
    let mut set = BTreeSet::new();
    for i in 0..n - m + 1 {
        let mut ok = true;
        for j in 0..m {
            if s[i + j] != '?' && s[i + j] != t[j] {
                ok = false;
                break;
            }
        }
        if !ok {
            continue;
        }
        let mut x = vec![];
        for c in s[0..i].iter().copied() {
            x.push(if c == '?' { 'a' } else { c });
        }
        for c in t.iter().copied() {
            x.push(c);
        }
        for c in s[i + m..].iter().copied() {
            x.push(if c == '?' { 'a' } else { c });
        }
        set.insert(x);
    }
    let ans = set
        .first()
        .map(|s| s.iter().copied().collect::<String>())
        .unwrap_or_else(|| "UNRESTORABLE".to_string());
    println!("{ans}");
}
今日のコミット。