zoukankan      html  css  js  c++  java
  • Grid Coloring

    这是牛客多校第六场的G题,也是我第一篇关于牛客多校的博客。

    这道题题目意思是给你一个n*n的细胞块,让我们通过给每一块的边缘绘色,让他满足以下三个条件:

    (1)满足每种颜色的颜色数量相同;

    (2)满足每一块不能全部用一个色绘边;

    (3)满足同一行或者同一列要2种颜色以上;

    题目给我们t组测试样例,然后给我们n和k种颜色。

    大致分析一下可以得出以下结论:

    (1)边的数量要是k的整数倍;

    (2)n和k不能为1。

    然后我们开始构造:

    我们只需要保证同行 / 列没有两条相邻的边,且相邻两行 / 列同一列 / 行的边颜色不相同。

    这是很好构造的,对于 ,直接按  顺序依次分配边权;对于 ,在偶数行 / 列上循环移 1 位即可。

    然后附上AC代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #define ll long long
    using namespace std;
    
    long long  pow_mod(long long  a, long long k,long long mod)
    {
        long long  ans = 1;
        a %= mod;
        while (k)
        {
            if (k % 2) ans *= a;
            a = (a * a) % mod;
            k /= 2;
            ans %= mod;
        }
        return ans;
    }
    
    
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            int n, k;
            cin >> n>>k;
            if ((2 *n* (n + 1)) % k != 0||n==1||k==1)
            {
                cout << "-1" << endl;
            }
            else
            {
                if (n % k == 0)
                {
                    int lazy = 0;
                    for (int i = 1; i <= 2 * (n + 1); i++)
                    {
                        int flag = lazy;
                        for (int j = 1; j <= n; j++)
                        {
                            flag = flag % k + 1;
                            printf("%d", flag);
                            if (j == n)printf("
    ");
                            else printf(" ");
                        }
                        lazy ^= 1;
                    }
                }
                else
                {
                    int lazy = 0;
                    for (int i = 1; i <= 2 * (n + 1); i++)
                    {
                        for (int j = 1; j <= n; j++)
                        {
                            lazy = lazy % k + 1;
                            printf("%d", lazy);
                            if (j == n)printf("
    ");
                            else printf(" ");
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    推荐几款Silverlight Tools【转载】
    Emit Vs CodeDom
    Silverlight 中实现Service同步调用
    一个配置文件的Mapping
    Silverlight:获取ContentTemplate中的命名控件
    关于计划
    巧用异步委托解决异步并发问题
    我是如何学习NodeJs的 – 笔记1
    应用HttpHandler, Json, JQuery, ASP.Net UserControl等技术处理 Ajax 的解决方案
    关于程序员的那些事一个五年程序员的总结
  • 原文地址:https://www.cnblogs.com/csxaxx/p/13390954.html
Copyright © 2011-2022 走看看