#include <cstdio> #include <map> #define REP(a, n) for (int a = 0; a < (n); ++a) using namespace std; typedef long long LL; ////////////////////// char tab[2005][2005]; int ile[2][2005][200], W[2]; bool byl[2][2005]; char typ[5000], kolor[5000]; int num[5000]; int main() { scanf("%d%d", &W[0], &W[1]); REP(y, W[0]) { scanf("%s", tab[y]); REP(x, W[1]) { ile[0][y][tab[y][x]]++; ile[1][x][tab[y][x]]++; } } int zz = W[0]+W[1]; while (zz) { REP(t, 2) REP(n, W[t]) if (!byl[t][n]) { char k = 'A'; int i = 0; for (char kk = 'A'; kk<='Z'; ++kk) if (ile[t][n][kk]) { ++i; k = kk; } if (i<=1) { byl[t][n] = 1; --zz; typ[zz] = t ? 'K' : 'R'; num[zz] = n; kolor[zz] = k; REP(m, W[1-t]) ile[1-t][m][t ? tab[m][n] : tab[n][m]]--; } } } printf("%d\n", W[0]+W[1]); REP(a, W[0]+W[1]) printf("%c %d %c\n", typ[a], num[a]+1, kolor[a]); }
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 | #include <cstdio> #include <map> #define REP(a, n) for (int a = 0; a < (n); ++a) using namespace std; typedef long long LL; ////////////////////// char tab[2005][2005]; int ile[2][2005][200], W[2]; bool byl[2][2005]; char typ[5000], kolor[5000]; int num[5000]; int main() { scanf("%d%d", &W[0], &W[1]); REP(y, W[0]) { scanf("%s", tab[y]); REP(x, W[1]) { ile[0][y][tab[y][x]]++; ile[1][x][tab[y][x]]++; } } int zz = W[0]+W[1]; while (zz) { REP(t, 2) REP(n, W[t]) if (!byl[t][n]) { char k = 'A'; int i = 0; for (char kk = 'A'; kk<='Z'; ++kk) if (ile[t][n][kk]) { ++i; k = kk; } if (i<=1) { byl[t][n] = 1; --zz; typ[zz] = t ? 'K' : 'R'; num[zz] = n; kolor[zz] = k; REP(m, W[1-t]) ile[1-t][m][t ? tab[m][n] : tab[n][m]]--; } } } printf("%d\n", W[0]+W[1]); REP(a, W[0]+W[1]) printf("%c %d %c\n", typ[a], num[a]+1, kolor[a]); } |