AGC014: A - Cookie Exchanges

問題

A - Cookie Exchanges

解説

適当にシミュレーションで実験をしてみると、操作回数は多くなさそう+クッキーの数は互いに近づきつつ一致せずに停止することがわかる。

よって、シミュレーションのコードを提出した。3つが同数の場合、奇数なら0で、偶数なら-1となる。

公式の解説によると、最大値と最小値の差が半減していくのでO(logM)の計算量になる。 https://atcoder.jp/img/agc014/editorial.pdf

template<class T> void operator>> (istream& ist, vector<T>& vs) { for(auto& e: vs) cin >> e; }

int main() {
  vector<int> v(3); cin >> v;
  if (v[0] == v[1] && v[1] == v[2]) {
    cout << (v[0] % 2 ? 0 : -1) << "\n";
    exit(0);
  }
  int counter = 0;
  while (1) {
    if (v[0] % 2 || v[1] % 2 || v[2] % 2) break;
    v = {(v[1] + v[2]) / 2, (v[2] + v[0]) / 2, (v[0] + v[1]) / 2};
    counter++;
  }
  cout << counter << "\n";
}