标签:time 存在 define deb abc read lan Edito tchar
https://atcoder.jp/contests/agc041/tasks/agc041_c
https://img.atcoder.jp/agc041/editorial.pdf
称每行每列的quality为\(Q\)的大小为\(N\)的矩阵为\((N,Q)\).发现假如存在合法的\((A,Q),(B,Q)\),那么一定也存在合法的\((A+B,Q)\).也就是将\(A \times A\)的矩阵放在左上角,\(B \times B\)的矩阵放在右下角即可.
那么考虑用一些较小的矩阵来拼出较大的矩阵来
\(N=2\)时无解,\(N=3\)时用\((3,1)\)的矩阵,当\(N\ge 4\)时,先不断在右下角放\((4,3)\)的矩阵直到\(4 \le\ N \le 7\),然后再放上\((N,3)\)即可.
#include <cstdio>
#include <iostream>
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
inline char nc() {
// return getchar();
static char buf[100000],*l=buf,*r=buf;
return l==r&&(r=(l=buf)+fread(buf,1,100000,stdin),l==r)?EOF:*l++;
}
template<class T> void read(T &x) {
x=0; int f=1,ch=nc();
while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=nc();}
while(ch>=‘0‘&&ch<=‘9‘){x=x*10-‘0‘+ch;ch=nc();}
x*=f;
}
const int maxN=1000+5;
int N;
char an[maxN][maxN];
string s[8][8];
void init() {
s[4][0]="aabc";
s[4][1]="ddbc";
s[4][2]="bcaa";
s[4][3]="bcdd";
s[5][0]="aabba";
s[5][1]="bcc.a";
s[5][2]="b..cb";
s[5][3]="a..cb";
s[5][4]="abbaa";
s[6][0]="aabc..";
s[6][1]="ddbc..";
s[6][2]="..aabc";
s[6][3]="..ddbc";
s[6][4]="bc..aa";
s[6][5]="bc..dd";
s[7][0]="aabbcc.";
s[7][1]="dd.dd.a";
s[7][2]="..d..da";
s[7][3]="..d..db";
s[7][4]="dd.dd.b";
s[7][5]="..d..dc";
s[7][6]="..d..dc";
}
void work(int x,int y,int n) {
for(int i=0;i<n;++i) for(int j=0;j<n;++j) an[x+i][x+j]=s[n][i][j];
}
int main() {
init();
read(N);
if(N==2) puts("-1");
else if(N==3) {
puts("aa.");
puts("..a");
puts("..a");
}
else {
int n=N;
for(int i=0;i<n;++i) for(int j=0;j<n;++j) an[i][j]=‘.‘;
while(n>7) work(n-4,n-4,4),n-=4;
work(0,0,n);
for(int i=0;i<N;++i) {
for(int j=0;j<N;++j) printf("%c",an[i][j]);
printf("\n");
}
}
return 0;
}
标签:time 存在 define deb abc read lan Edito tchar
原文地址:https://www.cnblogs.com/ljzalc1022/p/13332702.html