重排序列(水题)
来源:互联网 发布:数据分析在职研究生 编辑:程序博客网 时间:2024/06/06 04:24
时间限制:1秒
空间限制:32768K
题目描述
小易有一个长度为N的正整数序列A={A[1], A[2], A[3], …, A[n]}。
牛博士给小易出了一个难题:
对数列A进行重新排列,使数列A满足所有的A[i]*A[i+1](1<=i<=N-1)都是4的倍数。
小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。
输入描述:
输入的第一行为数列的个数t(1<=t<=10)
接下来每两行描述一个数列A,第一行为数列长度n(1<=n<=10^5)
第二行为n个正整数Ai(1<=Ai<=10^9)
输出描述:
对于每个数列输出一行表示是否可以满足牛博士要求,如果可以输出Yes,否则输出No
示例1
输入
2
3
1 10 100
4
1 2 3 4
输出
Yes
No
解题思路:一开始考虑先统计4的倍数的个数,每隔一个数放一个4的倍数就行。
然后考虑到如果一个数不能被4整除但是能被2整除的话,相乘能被4整除,如2*2,10*10等。
所以我们分两个统计,一个是仅仅是2的倍数的数量,一个是是4的倍数的数量。统计出来的所有的仅仅是2的倍数的数放到一起可以保证满足条件A[i]*A[i+1]能被4整除,然后我们把这部分看成一个整体就变成了一个数!其余的就按一开始的思路每隔两个数放一个4的倍数就行,判断一下4的倍数的数量if(four>=(n-two+1)/2),这里已经保证了所有都仅仅是2的倍数的情况了。
#include <iostream>using namespace std;int main(){ int t, n, x, four, two; cin >> t; while(t--) { cin >> n; four = 0, two = 0; for(int i = 0; i < n; ++i) { cin >> x; if(x%4==0) four++; else if(x%2==0) two++; } if(four>=(n-two+1)/2) cout << "Yes" << endl; else cout << "No" << endl; } return 0;}/*231 10 10041 2 3 4*/
阅读全文
0 0
- 重排序列(水题)
- 字母重排
- 字母重排
- 字母重排
- 字母重排
- 字母重排
- 字母重排
- 字母重排
- 字母重排
- 九宫重排
- 九宫重排
- 字母重排
- 字母重排
- 字符重排
- 字母重排
- 九宫重排
- 字母重排
- 字母重排
- HDOJ 1394 Minimum Inversion Number(线段树+逆序数)
- Java的21个核心技术点,你知道吗?
- 详解Java中ArrayList、Vector、LinkedList三者的异同点
- POJ2996 Help Me with the Game(未完待续,模拟)
- vector & list
- 重排序列(水题)
- 层次聚类--R
- 最大似然估计
- POJ
- 2667: [cqoi2012]模拟工厂
- 多线程第三章(1)
- 【vue】webpack打包vue项目并且运行在Tomcat里面
- PAT乙级1013. 数素数 (20) 判断素数代码
- F