結果
| 問題 |
No.1677 mæx
|
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2021-08-14 03:13:31 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 5 ms / 2,000 ms |
| コード長 | 1,570 bytes |
| コンパイル時間 | 13,105 ms |
| コンパイル使用メモリ | 405,508 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-11 21:43:10 |
| 合計ジャッジ時間 | 12,060 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 18 |
ソースコード
fn read() -> (Vec<u8>, usize) {
use std::io::Read;
let mut s = String::new();
std::io::stdin().read_to_string(&mut s).unwrap();
let mut it = s.trim().split_whitespace();
let s = it.next().unwrap().bytes().collect::<Vec<_>>();
let k = it.next().unwrap().parse::<usize>().unwrap();
assert!(k <= 2);
(s, k)
}
fn elem(s: &str, c: u8) {
assert!(s.bytes().find(|p| *p == c).is_some());
}
const MOD: u64 = 998_244_353;
fn calc(k: &mut usize, s: &[u8]) -> [u64; 3] {
let f = s[*k];
*k += 1;
let mut res = [0; 3];
if f == b'm' {
let op = s[*k];
*k += 1;
elem("ae?", op);
elem("x", s[*k]);
*k += 1;
elem("(", s[*k]);
*k += 1;
let lhs = calc(k, s);
elem(",", s[*k]);
*k += 1;
let rhs = calc(k, s);
elem(")", s[*k]);
*k += 1;
for (i, l) in lhs.iter().enumerate() {
for (j, r) in rhs.iter().enumerate() {
if op != b'e' {
res[i.max(j)] += *l * *r;
}
if op != b'a' {
let x = (0..).find(|x| *x != i && *x != j).unwrap();
res[x] += *l * *r;
}
}
}
} else {
elem("0123?", f);
if f == b'?' {
res = [1; 3];
} else {
res[(f - b'0') as usize] = 1;
}
}
res.iter_mut().for_each(|p| *p %= MOD);
res
}
fn main() {
let (s, k) = read();
let ans = calc(&mut 0, &s)[k];
println!("{}", ans);
}
akakimidori