n a two dimensional array of integers of size 2 \times n2×n, is it possible to rearrange integers so that the sum of two adjacent elements (which are adjacent in a common row or a common column) is never divisible by three?
Input
The input has several test cases and the first line contains an integer t (1 \le t \le 200)t(1≤t≤200) which is the number of test cases.
In each case, the first line contains an integers n (1 \le n \le 10000)n(1≤n≤10000) indicating the number of columns in the array. The second line contains the elements of the array in the first row separated by single spaces. The third line contains the elements of the array in the second row separated by single spaces. The elements will be positive integers less then 10000001000000.
Output
For each test case, output “YES” in a single line if any valid rearrangement exists, or “NO” if not.
样例输入复制
6 3 3 6 9 1 4 7 3 3 6 9 1 3 8 5 1 2 3 4 5 6 7 8 9 10 10 1 1 1 1 1 1 1 1 1 1 2 3 2 3 2 3 2 3 2 3 2 3 1 2 3 2 3 1 1 2
样例输出复制
YES NO YES YES YES NO
符合条件的序列需要尽可能的0在中间做缓冲,1和2在两边。一开始模3即可!
#include <algorithm> //STL通用算法
#include <bitset> //STL位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex> //复数类
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque> //STL双端队列容器
#include <exception> //异常处理类
#include <fstream>
#include <functional> //STL定义运算函数(代替运算符)
#include <limits>
#include <list> //STL线性列表容器
#include <map> //STL 映射容器
#include <iomanip>
#include <ios> //基本输入/输出支持
#include<iosfwd> //输入/输出系统使用的前置声明
#include <iostream>
#include <istream> //基本输入流
#include <ostream> //基本输出流
#include <queue> //STL队列容器
#include <set> //STL 集合容器
#include <sstream> //基于字符串的流
#include <stack> //STL堆栈容器
#include <stdexcept> //标准异常类
#include <streambuf> //底层输入/输出支持
#include <string> //字符串类
#include <utility> //STL通用模板类
#include <vector> //STL动态数组容器
#include <cwchar>
#include <cwctype>
#define ll long long
using namespace std;
int dx[]= {-1,1,0,0,-1,-1,1,1};
int dy[]= {0,0,-1,1,-1,1,1,-1};
//priority_queue<int,vector<int>,less<int> >q;
const int maxn = 10000+66;
const ll mod=1e9+7;
int n;
int num[10];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(num,0,sizeof(num));
scanf("%d",&n);
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
x%=3;
num[x]++;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
x%=3;
num[x]++;
}
//统计出0 1 2的数量
int flag=0;
if(num[0]>n)flag=1;
else
{
if(num[0]<=1&&num[1]&&num[2])flag=1;//讨论0的情况个数
else if(num[0]>=2&&num[1]&&num[2])
{
if(num[0]==2&&(num[1]%2==0||num[2]%2==0))
flag=1;
else flag=0;
}
}
if(flag)printf("NO\n");
else printf("YES\n");
}
return 0;
}