atcoder-solutionsatcoder-solutions
abc452_c

Fishbones の解説

解説 by @ohnuma

解説

読解力が無さすぎて80回くらい問題読みましたが、

  • N個文字をSiからとってきます。重複してもよいです。
  • その文字列のi個目の文字列は長さaでなくてはいけないです。
  • このとき、i個目の文字列からb番目の文字を取得して長さNの文字列を作った際にSqにすることができるか?という問題を0..qで解いてください

ということでした。

ということで、i文字目に選べる文字を列挙したmapを用意しておいて、 Siのi番目の文字がmap[i]に入っているかどうかをチェックすることで回答できます。

fn main() { input! { n: usize, ab: [(usize, Usize1); n], m: usize, s: [Chars; m] } let mut map = vec![HashSet::new(); n]; for i in 0..m { for j in 0..n { let (a, b) = ab[j]; if s[i].len() != a { continue; } map[j].insert(s[i][b]); } } for i in 0..m { if s[i].len() != n { println!("No"); continue; } let mut flg = true; for (idx, &c) in s[i].iter().enumerate() { if !map[idx].contains(&c) { flg = false; break; } } let ans = if flg {"Yes"} else {"No"}; println!("{}", ans); } }

コメント