网易算法工程师计算机视觉,编程第二道

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using std::cout;
using std::cin;
using std::vector;
using std::string;

bool isValidArray(vector<int> nums){
    int onlyTwo = 0;
    int Four = 0;
    int odd = 0;

    for (auto& num: nums){
        if (num % 2 != 0){odd++;}
        else{
            if (num %4 != 0) onlyTwo++;
            else {Four++;}
        }
    }
    int block = 0;
    if (onlyTwo > 0){
        block = odd + 1;
    }
    else {block = odd;}
    
    int sieve = block - 1;
    
    if (Four < sieve){
        return false;
    }
    else{
        return true;
    }
}

int main(){
    int T;
    cin >> T;
    for (int i = 0; i != T; ++i){
        int N;
        cin >> N;
        vector<int> nums;
        for (int j = 0; j != N; ++j){
            int tmp;
            cin >> tmp;
            nums.push_back(tmp);
        }
        if (isValidArray(nums)){cout << "Yes\n";}
        else {cout << "No\n";}
        nums.clear();
    }

    return 0;
}
 

想法:把所有数分成奇数,只是2倍数的偶数,其它偶数(也就是能被4整除),如果存在只是2的倍数的偶数,把这些数看成一个,加上奇数,形成了一些空隙,4 的倍数的那些偶数可以插空。如果可以填满,那么就是 yes,否则就是 no
全部评论
大佬,为什么要统计2的倍数啊?我就是4的倍数的个数,大于剩下的个数不就行吗?
点赞 回复 分享
发布于 2017-09-09 17:25
计算机视觉360问答题,被吓到了。。。。吐血
点赞 回复 分享
发布于 2017-09-09 17:33

相关推荐

头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
我是小红是我:学校换成中南
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务