【题解】2020牛客暑期多校训练营(第六场)Problem G

Grid Coloring

https://ac.nowcoder.com/acm/contest/5671/G

介绍一个简短的 G 题构造方案。

先特判无解的情况,

注意到一个同色的环中必然存在一条边 ,使得它与 同色。

如图:

pic

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

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

时间复杂度是

代码:

#include <algorithm>
#include <cstdio>
#include <cstring>

int main() {
  int te; scanf("%d", &te);
  while (te--) {
    int n, k;
    scanf("%d %d", &n, &k);
    if (n == 1 || (2 * n * (n + 1)) % k != 0 || k == 1) {
      puts("-1");
      continue;
    }
    if (n % k == 0) {
      int c = 0;
      for (int i = 1; i <= 2 * (n + 1); ++i) {
        int last = c;
        for (int j = 1; j <= n; ++j) {
          last = last % k + 1;
          printf("%d%c", last, " \n"[j == n]);
        }
        c ^= 1;
      }
    } else {
      int last = 0;
      for (int i = 1; i <= 2 * (n + 1); ++i)
        for (int j = 1; j <= n; ++j) {
          last = last % k + 1;
          printf("%d%c", last, " \n"[j == n]);
        }
    }
  }
  return 0;
}
全部评论
(菜鸡提问)大佬能解释一下为什么k∤2n(n+1)时无解么
点赞 回复 分享
发布于 2020-07-28 12:31

相关推荐

jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
11 收藏 评论
分享
牛客网
牛客企业服务