1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<bits/stdc++.h> using namespace std; int n,m,bst=0; char now[15][15],ans[15][15]; int dx[4][5]={ {0,-1,-2,-2,-2}, {0,-1,-1,-1,-2}, {0,0,0,-1,-2}, {0,-1,-1,-1,-2} }; int dy[4][5]={ {-1,-1,0,-1,-2}, {0,0,-1,-2,0}, {0,-1,-2,-1,-1}, {-2,0,-1,-2,-2} }; void dfs(int x,int y,char ch) { if(y>m) { dfs(x+1,3,ch); return; } if(x>n) { if(ch-'A'>bst) { bst=ch-'A'; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans[i][j]=now[i][j]; } return; } if(ch-'A'+((n-x+1)*m+(m-y+1))/5<bst) return; for(int i=0;i<4;i++) { bool ok=1; for(int j=0;j<5;j++) if(now[x+dx[i][j]][y+dy[i][j]]!='.') { ok=0; break; } if(ok) { for(int j=0;j<5;j++) now[x+dx[i][j]][y+dy[i][j]]=ch; dfs(x,y+1,ch+1); for(int j=0;j<5;j++) now[x+dx[i][j]][y+dy[i][j]]='.'; } } dfs(x,y+1,ch); } signed main() { cin>>n>>m; if(n<3||m<3) { cout<<0<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<'.'; cout<<endl; } return 0; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) now[i][j]='.'; bst=(n/3)*(m/3)-1; now[1][1]=now[1][2]=now[1][3]=now[2][2]=now[3][2]='A'; dfs(3,4,'B'); now[1][1]=now[1][2]=now[1][3]=now[2][2]=now[3][2]='.'; now[1][1]=now[2][1]=now[3][1]=now[2][2]=now[2][3]='A'; dfs(3,4,'B'); cout<<bst<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<ans[i][j]; cout<<endl; } return 0; }
|