本地明明可以通过的,为啥提交通过率为0.。。

#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> getLists(){
    
    
    int listNum;
    cin >> listNum;
    
    vector<vector<int>> lists;
    
    for (int i = 0; i < listNum; i++) {
    
        int listLen = 0;
        
        cin >> listLen;
        
        vector<int> list;
        
        for (int i = 0; i < listLen; i++) {
            
            int num;
            
            cin >> num;
            
            list.push_back(num);
        }
        
        lists.push_back(list);
        
        list.clear();
        
        
    }
    
    
    return lists;
    

}

int getmul4numsCount(vector<int> list){
    
    int count = 0;
    
    for (int i = 0; i < list.size(); i++) {
        
        if (list[i] == 0) {
            break;
        }
        
        if (list[i] % 4 == 0) {
            count ++;
        }
        
        
    }
    
    return count;
    

}

bool testIsTrueList(vector<int> list){
    
    int num = getmul4numsCount(list);
    
    int needNums = (int)(list.size() / 2);
    
    return num >= needNums;
    
}


int main(int argc, const char * argv[]) {
    
    vector<vector<int>> lists = getLists();
    
    for (int i = 0; i < lists.size(); i++) {
        
        if (testIsTrueList(lists[i])) {
            cout << "Yes" << endl;
        }else{
            cout << "No" << endl;
        }
        
    }
    
    
    return 0;
}

全部评论
这题不用做的这么麻烦吧。直接计数就行了。能被1,2,4整除的数分别是多少再判断就行了。不过我的做法90%,不知道哪个case没过... #include <iostream> #include <cstdio> #include <cstdlib> #include <cstdint> #include <vector> #include <stack> #include <algorithm> #include <unordered_map> #include <cmath> #include <cstring> #include <queue> #include <set> using namespace std; #define MAX 100005 #define MOD 1000000007 #define LL long long int int t, n; LL nums[MAX]; //vector<int> a1, a2, a4; int a1,a2,a4; bool check(LL a, LL b){ return ((a * b) & 3) == 0; } int main() { #ifdef DEBUG freopen("input.txt","r",stdin); #endif scanf("%d",&t); while(t --){ scanf("%d",&n); //a1.clear(); //a2.clear(); //a4.clear(); a1 = a4 = a2 =0; for (int i =0;i< n;i++){ scanf("%lld",&nums[i]); if (nums[i] %4 == 0) a4++; else if ( nums[i]%2 == 0) a2 ++; else a1 ++; } if (n == 1){ printf("No\n"); continue; } if (a1-1 > a4 || (a1 > 0 && a4 == 0)){ printf("No\n"); continue; } if (a1 == 0 || a2 == 0){ printf("Yes\n"); continue; } if (a1 > a4){ printf("No\n"); continue; } printf("Yes\n"); /* if ((a4< a1-1) || (a1 >0 && a4 == 0)){ printf("No\n"); continue; } if ((a2 >0) && a4 < a1 ) { printf("No\n"); continue; }*/ } return 0; }
点赞 回复 分享
发布于 2017-09-09 17:01
和我开始犯了一样的错误,注意可能两个都是2的倍数而不是4的
点赞 回复 分享
发布于 2017-09-09 17:01
只要能整除4的个数大于等于奇数个数就可以
点赞 回复 分享
发布于 2017-09-09 17:02
擦,我也是直接给我0*** public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); //数据个数 String[] str = new String[num]; for(int i = 0; i < num;i++){ int arrNum = sc.nextInt(); //数组元素个数 int[] arr = new int[arrNum]; //放入数组中 for(int j = 0; j < arrNum;j++){ arr[j] = sc.nextInt(); } //判断数组的奇数的个数是否大于偶数+1.  偶数的数值是否是4的倍数 //或者说。只要判断4的倍数的偶数的个数是否大于数列/2 int sum = 0; //4的倍数的偶数的个数 for(int j = 0; j < arrNum;j++){ if(arr[j] % 4 == 0){ sum++; } } if(sum >= arrNum/2){ str[i] = "Yes"; }else{ str[i] = "No"; } } for(String s : str){ System.out.println(s); } } } 2 3 1 10 100 4 1 2 3 4 Yes No
点赞 回复 分享
发布于 2017-09-09 17:09
我也是本地能通过
点赞 回复 分享
发布于 2017-09-09 17:00
找规律更快一点吧
点赞 回复 分享
发布于 2017-09-09 17:00
我也是 超时了 
点赞 回复 分享
发布于 2017-09-09 17:01
哥,你还没考虑2呢,然而我考虑了2也是0%
点赞 回复 分享
发布于 2017-09-09 17:01
我也是!!!!!
点赞 回复 分享
发布于 2017-09-09 17:02
你测一下 1 4 2 1 4 2 能过就对了,不能过就是你代码有问题
点赞 回复 分享
发布于 2017-09-09 17:02
本宝宝表示第一和第三两道题结果都对,但全都超时
点赞 回复 分享
发布于 2017-09-09 17:03
同Java,我过了案例,也一直10%
点赞 回复 分享
发布于 2017-09-09 17:04
只要数组里能被4整除的数大于等于奇数的个数就行了
点赞 回复 分享
发布于 2017-09-09 17:04
// 确实是有规律,以下几种情况,[1,2,4]分别表示该位置的数能被[1,2,4]整除: // 1. 存在能被 2 整除的数。 [2 2 2 4 1] // 2. 不存在能被 2 整除的数。 [1 4 1] // 我用下面的代码可以 AC #include <vector> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int t, n; cin >> t; for (int j = 0; j < t; ++j) { vector<int> v; int n, tmp; cin >> n; int d1 = 0; int d2 = 0; int d4 = 0; for (int i = 0; i < n; ++i) { cin >> tmp; // v.push_back(tmp); if (tmp & 1) ++d1; else if ((tmp & 3) == 0) ++d4; else if ((tmp & 1) == 0) ++d2; } if ((d2 == 0 && d4+1 >= d1) || (d2 > 0 && d4 >= d1)) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
点赞 回复 分享
发布于 2017-09-09 17:08
没统计2的个数
点赞 回复 分享
发布于 2017-09-09 17:14
int n;     cin >> n;     vector<int> counter(5, 0), nums(n);     for (int i = 0; i < n; i++) {       cin >> nums[i];       if (nums[i] % 4 == 0)         counter[4]++;       else if (nums[i] % 2 == 0)         counter[2]++;       else         counter[1]++;     }     int d = counter[1] + (counter[2] >= 1);     if (d - counter[4] > 1)       cout << "No" << endl;     else       cout << "Yes" << endl; 贴个我的,唯一AC的题目。只要统计1的和4的个数,2只需要统计其是否出现。 2必须全部放在一起,可把全部放在一起的2看作是1个1。那么只需要考虑4的数目和1的数目之间的关系了。
点赞 回复 分享
发布于 2017-09-09 17:20

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务