• Rearrangement


    In a two dimensional array of integers of size 2×n2 imes 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≤t≤200)t (1 le t le 200)t(1t200) which is the number of test cases.

    In each case, the first line contains an integers n(1≤n≤10000)n (1 le n le 10000)n(1n10000) 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 100000010000001000000.

    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
    一个大水题嘤嘤嘤
    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    int s[20100]={0};
    int main()
    {
        ios::sync_with_stdio(false);
        int i,m,n;
        int T;
        cin>>T;
        while(T--)
        {
            bool flag=0;
            int a=0,b=0,c=0;
            cin>>n;
            for(i=1;i<=2*n;i++)
            {
                cin>>m;
                s[i]=m%3;
                if(s[i]==0) a++;
                else if(s[i]==1) b++;
                else if(s[i]==2) c++;
            }
            if(a>n) flag=0;
            else if(a==n) flag=1;
            else if(a<n){
                if(b==0||c==0) flag=1;
                else if(a<=1) flag=0;
                else if(a==2){
                    if(b%2==0&&c%2==0) flag=0;
                    else flag=1;
                }
                else flag=1;
            }
            if(flag) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        return 0;
    }
    View Code

    首先对三取模这是最先想到的

    然后对a在各个情况下讨论

    当a大于n 肯定是不可能的,因为这样两个0一定会相遇

    当a大于n一定可以,交叉嘛

    当a小于n

    有b和c有只要有一个为0,一定可以

    然后是n小于等于1 一定不行

    接下来n大于1:

    耗费了两个小时啊啊啊

    首先这肯定只能找规律,跟数量有关吗,很明显没有关系

    那应该跟奇数还是偶数有关

    当n奇数我发现其他数一定为一奇一偶,然后一定可以;

    于是我就想当n为偶数的时候,然后我就拿2当例子,做了一大堆实验,WA了好多发;

    后来才知道2是一个特殊情况,我不能就通过2来断定偶数都是这个规律

    不要忘记努力,不要辜负自己 欢迎指正 QQ:1468580561
  • 相关阅读:
    Java最大栈深度有多大?-从一道面试题开始学习JVM
    高性能队列——Disruptor
    高性能的Redis之对象底层实现原理详解
    高性能的Redis之数据持久化小结
    高性能的Redis之数据结构小结
    Redis单线程为什么如此之快?
    kafka partition与 group的特性
    深扒Disruptor高性能的原因
    Python 元类编程实现一个简单的 ORM
    用vue.js实现的期货,股票的实时K线
  • 原文地址:https://www.cnblogs.com/smallocean/p/8728616.html
Copyright © 2020-2023  润新知