• 牛客多校6 G.Grid Coloring【构造】


    做法:在注意到n==1,k==1,和无法让所有边均分颜色这几种情况无解后,因为横竖边数量的奇偶性不同,所以直接一排横一排竖地按(1~k)的顺序给每条边标号(染色)就能保证条件123同时成立

    CODE

     1 #include <bits/stdc++.h>
     2 #define dbug(x) cout << #x << "=" << x << endl
     3 #define eps 1e-8
     4 #define pi acos(-1.0)
     5  
     6 using namespace std;
     7 typedef long long LL;
     8  
     9 const int inf = 0x3f3f3f3f;
    10  
    11 template<class T>inline void read(T &res)
    12 {
    13    char c;T flag=1;
    14    while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;res=c-'0';
    15    while((c=getchar())>='0'&&c<='9')res=res*10+c-'0';res*=flag;
    16 }
    17 
    18 const int maxn = 207;
    19 
    20 int t, n, k;
    21 
    22 vector<int> l[maxn], r[maxn];
    23 
    24 int main()
    25 {
    26     read(t);
    27     while(t--) {
    28         read(n); read(k);
    29         if(k == 1 || n == 1) {
    30             puts("-1");
    31             continue;
    32         }
    33         int num = (n * (n + 1)) * 2;
    34         if(num % k) {
    35             puts("-1");
    36             continue;
    37         }
    38         for ( int i = 1; i <= n + 1; ++i ) {
    39             l[i].clear();
    40             r[i].clear();
    41         }
    42         int kk = 1;
    43         int L = 0;
    44         for ( int i = 1; i <= n + n + 1; ++i ) {
    45             if(i % 2) {
    46                 ++L;
    47                 for ( int j = 1; j <= n; ++j ) {
    48                     l[L].push_back(kk);
    49                     kk++;
    50                     if(kk > k) {
    51                         kk = 1;
    52                     }
    53                 }
    54             }
    55             else {
    56                 for ( int j = 1; j <= n + 1; ++j ) {
    57                     r[j].push_back(kk);
    58                     kk++;
    59                     if(kk > k ) {
    60                         kk = 1;
    61                     }
    62                 }
    63             }   
    64         }
    65         for ( int i = 1; i <= L; ++i ) {
    66             for(auto it : l[i]) {
    67                 cout << it << ' ';
    68             }
    69             puts("");
    70         }
    71         for ( int i = 1; i <= n + 1; ++i ) {
    72             for(auto it : r[i]) {
    73                 cout << it << ' ';
    74             }
    75             puts("");
    76         }
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    关于《大道至简-软件工程实践者的思想》的读书笔记(二)
    关于《大道至简-软件工程实践者的思想》的读书笔记(一)
    Android源码项目目录结构
    Android源码目录结构详解
    项目阶段总结
    站立会议07(二期)
    站立会议06(二期)
    站立会议05(二期)
    站立会议04(二期)
    站立会议03(二期)
  • 原文地址:https://www.cnblogs.com/orangeko/p/13387431.html
Copyright © 2020-2023  润新知