AGC014 A - Cookie Exchanges
問題はこちら
atcoder.jp
方針
言われた操作を記述するだけですが,while内を単に
… a=b/2+c/2; b=c/2+a/2; c=a/2+b/2; …
などとしてしまわないように注意。きれいな漸化式なのでやりたくなります。
「無限回操作が行える 有限回の操作後,初期状態に戻る」と解釈しています(証明はしていません)。
コード
#include <bits/stdc++.h> using namespace std; int main(){ int a_ini,b_ini,c_ini; //A,B,Cの初期値 cin>>a_ini>>b_ini>>c_ini; int a=a_ini; int b=b_ini; int c=c_ini; int count=0; int a_temp,b_temp,c_temp; while(a%2==0 && b%2==0 && c%2==0){ a_temp=a; b_temp=b; c_temp=c; a=b_temp/2+c_temp/2; b=c_temp/2+a_temp/2; c=a_temp/2+b_temp/2; count++; if(a==a_ini && b==b_ini && c==c_ini){ count=-1; break; } } cout<<count<<endl; }