这题不用做的这么麻烦吧。直接计数就行了。能被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; }
点赞 3

相关推荐

06-26 10:08
门头沟学院 C++
北京Golang实习,一个月4700,吃住都不报,公司位置在海淀。请问友友怎么看呢?如果要租房的话有什么建议吗
码农索隆:租房肯定是合租了,剩下的钱,差不多够正常吃饭了,看看能不能学到东西吧
点赞 评论 收藏
分享
牛客266927136号:为啥实习经历写这么少,项目经历反而大写特写,最重要的还是实习经历吧,写具体点,什么场景下做了什么事,解决了什么问题,优化了什么场景,性能提升了多少多少
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-26 19:47
中南大学 Java
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务