ARC 080 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; }