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

浙公网安备 33010602011771号