AT2686

SOL

这道题看到第一眼的感觉就是暴力。

但一看数据范围,暴力是行不通的。

其实这道题是一道数论题,如果这些数里有一半都是 4 的倍数的话,这些给剩下的配对,就能全部整除 4。

我们可以轻松的写出这份代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],sum=0;
int main(){
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
    if(a[i]%4==0)sum++;
  }
  if(sum>=n/2)cout<<"Yes";
  else cout<<"No";
  return 0;
}

 

当我提交了后,发现居然在第 5 个样例点上出错了!

突然我想到 4 可以拆分成 2×2 ,1×4 以及 4×1。

于是我们把判断加上 b%2, 提交,居然对了。

AC Code:

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],sum=0,sum2=0;
  int main(){
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
    if(a[i]%4==0)sum++;
    else if(a[i]%2==0)sum2++;
  }
  if(sum2/2+sum>=n/2)cout<<"Yes";
  else cout<<"No";
  return 0;
}

 

posted @ 2022-01-22 21:37  ju__ruo  阅读(44)  评论(0)    收藏  举报