2020牛客多校第六場 G.Grid Coloring 構造
阿新 • • 發佈:2020-07-29
https://ac.nowcoder.com/acm/contest/5671/G
題意:
一個n*n的網格,k種顏色,給網格的邊緣染色;
條件:
1.所有顏色出現相同的次數;
2.不存在單色環;
3.每條水平線或垂直線都應該至少包含兩種顏色。
輸出每條水平線的顏色和垂直線的顏色;
沒有答案輸出-1。
解法:
n=1,或者k=1,或者 2*(n+1)*n%k != 0,都不能滿足題意,輸出-1;
否則如下圖構造:
(原理我也不懂,問就是猜猜猜猜,,,賽中沒看懂題意,題中的圖沒有顯示,可能得換電腦了(誤,賽後瞎jb猜了下,感覺第一排比第二排多一個會錯開,應該可以,就試了一下,然後就過了,驚了!!!!!!!太tm虧了,比賽沒做這題)
#include <bits/stdc++.h> using namespace std; const long long mod =1e9+7; typedef long long ll; const int inf =0x3f3f3f3f; const long long INF =0x3f3f3f3f3f3f3f3f; const int MAXN =5e2+5; int a[MAXN][MAXN],b[MAXN][MAXN]; int main() { int t; scanf("%d",&t); while(t--) {View Codeint n,k; scanf("%d%d",&n,&k); if(2*(n+1)*n%k!=0||k<=1||n==1) { printf("-1\n"); continue; } int cnt=0; for(int i=1;i<=n+1;i++) { for(int j=1;j<=n;j++) { a[i][j]=++cnt;if(cnt==k)cnt=0; } if(i!=n+1) { for(int j=n+1;j>=1;j--) { b[i][j]=++cnt; if(cnt==k)cnt=0; } } } for(int i=1;i<=n+1;i++) { for(int j=1;j<=n;j++) { printf("%d%c",a[i][j],j==n?'\n':' '); } } for(int i=1;i<=n+1;i++) { for(int j=1;j<=n;j++) { printf("%d%c",b[j][i],j==n?'\n':' '); } } } return 0; }