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);
}
今日のコミット。