题目:
小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]…, A[N]}。
牛博士给小易出了一个难题:
对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。
小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。
思路:
sum初始为0
对每个数字进行统计:
- 如果能被4整除,则sum+=2;
- 如果不能被4整除,但能被2整除,则记为sum+=1;
- 若不能被2整除,则记为sum+=0;
如果最终sum大于等于数组大小,则为Yes,否则为No。别问我为什么,我也是瞎蒙蒙中的。
#include <iostream>
#include <vector>
using namespace std;
bool f(vector<int> &vec){
int sumof2 = 0;
for (int i = 0; i < vec.size(); ++i){
int max = 2;
while (max && vec[i]%2 == 0){
sumof2 += 1;
--max;
vec[i] /= 2;
}
}
return sumof2 >= vec.size();
}
int main(){
int total;
cin >> total;
for (int i = 0; i < total; ++i){
int n;
vector<int> vec;
cin >> n;
for (int j = 0; j < n; ++j){
int t;
cin >> t;
vec.push_back(t);
}
if (f(vec)){
cout << "Yes"<<endl;
}else{
cout << "No"<<endl;
}
}
return 0;
}