CF318に参加。
ABはまぁまぁサクサク解けて、Cは自信ないながらもギリギリ解けたのでレートがそこそこ回復。
http://codeforces.com/contest/573/problem/A
問題
N要素の数列Aが与えられる。
各要素に対し、2倍または3倍にする操作を任意回数行えるとき、全要素の値を揃えられるか判定せよ。
解法
Aの各要素を素因数分解して考えると、2倍3倍して全要素をそろえられるということは、素因数分解後の値において2および3の累乗の項以外は元々一致していなければならない。
よってAの各要素を2及び3で割れるだけ割り、値が一致するか調べればよい。
int N; set<int> S; void solve() { int i,j,k,l,r,x,y; string s; cin>>N; FOR(i,N) { cin>>x; while(x%2==0) x/=2; while(x%3==0) x/=3; S.insert(x); } if(S.size()==1) _P("Yes\n"); else _P("No\n"); }
まとめ
これはすんなり。