hitoare日記

たまに書きます

F - Three Variables Game(AtCoder Beginner Contest 166)

 未証明です。

問題リンク

atcoder.jp


問題概要

 3つの非負整数A,B,CとN個の文字列(AB,AC,BCのいずれか)が与えられる。

\(1\leqq i \leqqN\)に対し、i番目の文字列がABならば「Aに1足しBから1引く」「Bに1足しAから1引く」のいずれかを選ぶ(AC,BCについても同様)。

途中でA,B,Cのいずれかが負になってはいけない。

そのような手順が存在するならばYesと出力して手順を1つ示せ。

存在しなければNoを出力せよ。

解法

相当厳しい条件でないとNoにはならなさそうなので、実際にシミュレーションした。

 「A,B,Cのうち2つ以上が正」の状態を常に保ち続ければ、手順が存在する。

なので、できるだけ数のバランスを保つようにする。

i番目の文字列がABの時は

  • A=B=0ならばNoを出力して終了
  • i+1番目がAC、かつA=1かつC=0ならばAに1足す
  • i+1番目がBC、かつB=1かつC=0ならばBに1足す
  • それ以外の場合は小さい方に1足す

とした。

提出

https://atcoder.jp/contests/abc166/submissions/12745093

感想

Dに続きビクビクしながら提出した。