Link
人类智慧发现(1,2)阶无解。
题目告诉了我们(3)阶的答案。
人类智慧手算(4sim 7)阶,每行每列的牌数为(3)的答案。
可以发现把两个每行每列牌数为(x),阶数分别为(n,m)的棋盘按左上-右下接在一起可以得到一个(n+m)阶的每行每列牌数为(x)的棋盘。
设(k=nmod 4),那么我们先在右下角搞一块(k+4)的棋盘,然后往左上一直接(4)的就行了。
#include<string>
#include<iostream>
int n,k;
std::string s[4][7]={{"aacd","bbcd","cdaa","cdbb"},{"aa.ab",".bbab","a.cca","a.a.a","bbabb"},{"aacd..","bbcd..","cd..aa","cd..bb","..aacd","..bbcd"},{"aacd...","bbcd...","cd.aa..","cd...bb","..a.baa","..a.b.b","..bbaab"}};
int main()
{
std::cin>>n,k=n&3;
if(n<3) std::cout<<"-1
";
else if(n==3) std::cout<<"aab
b.b
baa
";
else for(int i=0;i<n;++i)
{
std::string t(n,'.');
i<n-k-4? t.replace(i/4*4,4,s[0][i%4]):t.replace(n-k-4,k+4,s[k][i-n+k+4]);
std::cout<<t<<'
';
}
}