ykmakuのブログ

競技プログラミングをがんばるブログ

ARC 080 C - 4-adjacent

  • 問題

C - 4-adjacent

  • 解法

条件から数列内に奇数があった場合その数の隣は4の倍数でないといけないことが分かる。
4の倍数と4の倍数以外の偶数と奇数の数を数える。
4の倍数と4の倍数以外の偶数と奇数をそれぞれ4、2、1と書くことにすると、2がない場合1414141の並べ方が良い。もし2がある場合14141414222の並べ方が良い。
つまり2がない場合(4の個数)>=(1の個数)-1であればok。そうでない場合(4の個数)>=(1の個数)であればok。

#include <iostream>
#include <vector>

using namespace std;

typedef long long int ll;

int main()
{
	int n;
	cin >> n;
	vector<int> a(n);
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	int four=0,two=0,odd=0;
	for(int i = 0; i < n; i++){
		if(a[i]%4==0) four++;
		else if(a[i]%2==0) two++;
		else odd++;
	}

	if(two>0){
		if(four>=odd) cout << "Yes" << endl;
		else cout << "No" << endl;
	}else{
		if(four>=odd-1) cout << "Yes" << endl;
		else cout << "No" << endl;
	}

	return 0;
}