題目大意:有$k$種顏色,要求構造出一個$n\times n$的矩陣,填入這$k$種顏色,知足對於每一種顏色,其中填充這種顏色的每個方格,知足其相連的四個格子的顏色的個數和種類相同(對於每一種顏色而言,即不一樣顏色之間沒有關係)。要求$n\leqslant500$。$k\leqslant 1000$ios
題解:這個真的只能看題解,題解神仙ui
先考慮$k=4a(a\in\mathbb{N^*})$,令$n=\dfrac k2$,$(x,y)$填的數爲:當$x\equiv0\pmod2$是時爲$(x+y)\bmod n$,不然爲$n+((x+y)\bmod n)$。spa
而後題解說,其餘狀況時,令$n=2\left\lceil\dfrac n4\right\rceil$,構造出$k=2n$時的答案,而後把全部大於$k$的數減去$n$就是答案。blog
卡點:無ci
C++ Code:it
#include <cstdio> #include <iostream> int n, k; int main() { std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0); std::cin >> k; if (k == 1) { std::cout << "1\n1\n"; return 0; } std::cout << (n = k + 3 >> 2 << 1) << '\n'; for (int i = 0; i < n; ++i, std::cout.put('\n')) for (int j = 0, t; j < n; ++j) t = (i + j) % n + 1 + (i & 1) * n, std::cout << (t > k ? t - n : t) << ' '; return 0; }