blog.bouzuya.net

2023-06-05 子どもは熱だがいつものように元気だ / joi2014yo_d を解いた

良かったなら良かったよ

https://iris.to/note1j45vvuyy9hwhcweq82xjdx8y845fmnhxfyft7qhh25yn5ymlulhs4as842

某記事を見て。本人が良かったと思えるならそれは良かったんだと思う。

子どもが熱を出している。……が、いつものように元気だ。


bouzuya/tsukota 。アカウントの共有機能を追加しようとしている。

  • イベントの追加
  • @bouzuya/tsukota-account-events を更新
  • account module に addOwner と removeOwner を追加

次は functions を更新かな。 UI をどうするかまだ考えていない。とりあえず妻のアカウントを共有できればそれでいい。


  • joi2014yo_d 部活のスケジュール表 (日本情報オリンピック 予選 2014:D問題) https://atcoder.jp/contests/joi2014yo/tasks/joi2014yo_d
    • DP
    • 日毎の参加状況は 2^3 通り
    • 「責任者の有無」と「前日からの鍵の受け渡しの可否」で遷移の可否を判断する
    • 前日からしか遷移しないので dp, next の 2 つを持てば良い
use proconio::{input, marker::Chars};

fn main() {
    input! {
        _n: usize,
        s: Chars,
    }

    let chars = "JOI".chars().collect::<Vec<char>>();
    let mut dp = vec![0_usize; 1 << 3];
    dp[1] = 1_usize;
    for s_i in s {
        let mut next = vec![0_usize; 1 << 3];
        let mask = 1 << chars.iter().position(|c| c == &s_i).unwrap();
        for prev_bits in 0..1 << 3 {
            for next_bits in 0..1 << 3 {
                if (next_bits & mask) == 0 {
                    continue;
                }
                if (prev_bits & next_bits) == 0 {
                    continue;
                }
                next[next_bits] += dp[prev_bits];
                next[next_bits] %= 10_007;
            }
        }
        dp = next;
    }
    let ans = dp.iter().copied().sum::<usize>() % 10_007;
    println!("{}", ans);
}

今日のコミット。