SRM378 Div2 500

問題

黒板に、「Exactly a of these statements are true」のようにいくつか書かれていた。
このaには数字が入る。このstatementsの中にtrueなものはいくつあるか。
配列statementsが与えられ、その中には数字でtrueなものの最大数を返す。
もし、答えられない場合は-1を返す。

考え方

statements[i]がtrueとすれば、値がstatements[i]と同じものの個数がstatements[i]個あるはず。もし、あるならば、そのstatements[i]はtrueである。なければ、そのstatements[i]はfalseである。もしstatementsに0をいくつか含む場合は、0以外のstatements[i]がすべてfalseだと0がtrueになってしまうが、0がtrueならばstatementsの中にtrueが存在することになり、これはパラドックスでなので、-1を返す。


なので、statementsの各数字の個数をカウントし、statements[i]の個数とstatements[i]の値が同じものの中で最大のものを返す。ただし、statementsに0を含んでいて最大のものが0の時は矛盾するので、-1を返す。