200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 重排序列(水题) - 网易校园招聘研发工程师(有道事业部)笔试卷

重排序列(水题) - 网易校园招聘研发工程师(有道事业部)笔试卷

时间:2019-07-19 14:57:00

相关推荐

重排序列(水题) - 网易校园招聘研发工程师(有道事业部)笔试卷

时间限制: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;elsecout << "No" << endl;}return 0;}/*231 10 10041 2 3 4*/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。