#include <bits/stdc++.h> using namespace std; int t[2003][2003]; bool odwv[2003], odwh[2003]; int n, m, wyn; struct colour { int lp, kol; bool rk; }; colour odp[4003]; int vertical_check() { int zw=0; for(int i=1;i<=m;i++){ int p=-1, q=1; if(odwv[i]) continue; for(int j=1;j<=n;j++){ if(odwh[j]) continue; if(p!=-1&&p!=t[j][i]){ q=-1; break; } if(p==-1) p=t[j][i]; } if(q==1&&p!=-1){ odwv[i]=1; colour pom; pom.kol=p; pom.lp=i; pom.rk=1; odp[wyn]=pom; wyn++; zw=1; } } return zw; } int horizontal_check() { int zw=0; for(int i=1;i<=n;i++){ int p=-1, q=1; if(odwh[i]) continue; for(int j=1;j<=m;j++){ if(odwv[j]) continue; if(p!=-1&&p!=t[i][j]){ q=-1; break; } if(p==-1) p=t[i][j]; } if(q==1&&p!=-1){ odwh[i]=1; colour pom; pom.kol=p; pom.lp=i; pom.rk=0; odp[wyn]=pom; wyn++; zw=1; } } return zw; } int main() { scanf("%d%d", &n, &m); for(int i=1;i<=n;i++){ getchar(); for(int j=1;j<=m;j++){ t[i][j]=getchar(); } } horizontal_check(); int p=1, it=0; while(p){ if(it%2) p=horizontal_check(); else p=vertical_check(); it++; } printf("%d\n", wyn); for(int i=wyn-1; i>=0; i--){ if(odp[i].rk) printf("K %d %c\n", odp[i].lp, odp[i].kol); else printf("R %d %c\n", odp[i].lp, odp[i].kol); } return 0; }
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 77 78 79 80 81 82 83 84 85 86 87 88 | #include <bits/stdc++.h> using namespace std; int t[2003][2003]; bool odwv[2003], odwh[2003]; int n, m, wyn; struct colour { int lp, kol; bool rk; }; colour odp[4003]; int vertical_check() { int zw=0; for(int i=1;i<=m;i++){ int p=-1, q=1; if(odwv[i]) continue; for(int j=1;j<=n;j++){ if(odwh[j]) continue; if(p!=-1&&p!=t[j][i]){ q=-1; break; } if(p==-1) p=t[j][i]; } if(q==1&&p!=-1){ odwv[i]=1; colour pom; pom.kol=p; pom.lp=i; pom.rk=1; odp[wyn]=pom; wyn++; zw=1; } } return zw; } int horizontal_check() { int zw=0; for(int i=1;i<=n;i++){ int p=-1, q=1; if(odwh[i]) continue; for(int j=1;j<=m;j++){ if(odwv[j]) continue; if(p!=-1&&p!=t[i][j]){ q=-1; break; } if(p==-1) p=t[i][j]; } if(q==1&&p!=-1){ odwh[i]=1; colour pom; pom.kol=p; pom.lp=i; pom.rk=0; odp[wyn]=pom; wyn++; zw=1; } } return zw; } int main() { scanf("%d%d", &n, &m); for(int i=1;i<=n;i++){ getchar(); for(int j=1;j<=m;j++){ t[i][j]=getchar(); } } horizontal_check(); int p=1, it=0; while(p){ if(it%2) p=horizontal_check(); else p=vertical_check(); it++; } printf("%d\n", wyn); for(int i=wyn-1; i>=0; i--){ if(odp[i].rk) printf("K %d %c\n", odp[i].lp, odp[i].kol); else printf("R %d %c\n", odp[i].lp, odp[i].kol); } return 0; } |