kmjp's blog

競技プログラミング参加記です

Codeforces #318 Div1 A. Bear and Poker

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");
	
}

まとめ

これはすんなり。