?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
188294620 |
Practice: DaiRuiChen007 |
1551D2 - 36 | C++14 (GCC 6-32) | Accepted | 31 ms | 60 KB | 2023-01-07 11:28:04 | 2023-01-07 11:28:04 |
// LUOGU_RID: 98934738 #include<bits/stdc++.h> using namespace std; const int MAXN=101,dx[]={0,0,1,-1},dy[]={1,-1,0,0}; int n,m,a[MAXN][MAXN]; char ch[MAXN][MAXN]; inline bool valid(int i,int j) { return 1<=i&&i<=n&&1<=j&&j<=m; } inline void get(int i,int j) { if(ch[i][j]) return ; int i2=0,j2=0; for(int k:{0,1,2,3}) { int x=i+dx[k],y=j+dy[k]; if(!valid(x,y)) continue; if(a[x][y]==a[i][j]) { i2=x,j2=y; continue; } } for(char ret='a';ret<='z';++ret) { bool ok=true; for(int k:{0,1,2,3}) { int x=i+dx[k],y=j+dy[k]; if(!valid(x,y)||(x==i2&&y==j2)) continue; if(ch[x][y]==ret) { ok=false; break; } } for(int k:{0,1,2,3}) { int x=i2+dx[k],y=j2+dy[k]; if(!valid(x,y)||(x==i&&y==j)) continue; if(ch[x][y]==ret) { ok=false; break; } } if(ok) { ch[i][j]=ch[i2][j2]=ret; return ; } } return ; } inline void solve() { int k,cnt=0; scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { a[i][j]=ch[i][j]=0; } } if(n%2==0&&m%2==1) { if(k>n*(m/2)) { puts("NO"); return ; } else { if(k%2==0) { puts("YES"); for(int i=1;i<=n;i+=2) { for(int j=1;j<m;j+=2) { if(cnt>=k) goto fill; a[i][j]=a[i][j+1]=++cnt; a[i+1][j]=a[i+1][j+1]=++cnt; } } } else { puts("NO"); return ; } } } if(n%2==1&&m%2==0) { if(k<m/2) { puts("NO"); return ; } else { if((k-m/2)%2==0) { puts("YES"); for(int j=1;j<=m;j+=2) a[n][j]=a[n][j+1]=++cnt; for(int i=1;i<n;i+=2) { for(int j=1;j<=m;j+=2) { if(cnt>=k) goto fill; a[i][j]=a[i][j+1]=++cnt; a[i+1][j]=a[i+1][j+1]=++cnt; } } } else { puts("NO"); return ; } } } if(n%2==0&&m%2==0) { if(k%2==0) { puts("YES"); for(int i=1;i<=n;i+=2) { for(int j=1;j<=m;j+=2) { if(cnt>=k) goto fill; a[i][j]=a[i][j+1]=++cnt; a[i+1][j]=a[i+1][j+1]=++cnt; } } } else { puts("NO"); return ; } } fill:; for(int i=1;i<=n;i+=2) { for(int j=1;j<=m;++j) { if(!a[i][j]) { a[i][j]=a[i+1][j]=++cnt; } } } for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { get(i,j); printf("%c",ch[i][j]); } puts(""); } } signed main() { int T; scanf("%d",&T); while(T--) solve(); return 0; }
?
?
?
?