#include<bits/stdc++.h> using namespace std; char tab[2010][2010]; char slowo[2010]; int zliczW[2010][30]; int zliczK[2010][30]; vector<pair<int, char>>zapis; int main() { int n, m, i, j; scanf("%d%d", &n, &m); for(i=1;i<=n;i++){ scanf("%s", slowo+1); for(j=1;j<=m;j++){ tab[i][j] = slowo[j]; if(zliczW[i][tab[i][j]-'A']++==0) zliczW[i][26]++; if(zliczK[j][tab[i][j]-'A']++==0) zliczK[j][26]++; } } queue<int>kolejka; for(i=1;i<=n;i++){ if(zliczW[i][26]==1) kolejka.push(i); } for(i=1;i<=m;i++){ if(zliczK[i][26]==1) kolejka.push(n+i); } while(kolejka.size()){ int a = kolejka.front(); kolejka.pop(); if(a<=n){ if(zliczW[a][26]==0)continue; int znajdz = 0; for(i=0;i<26;i++) if(zliczW[a][i]) znajdz = i; zapis.push_back({a, znajdz+'A'}); zliczW[a][i] = 0; zliczW[a][26] = 0; for(i=1;i<=m;i++){ if(--zliczK[i][znajdz]==0) if(--zliczK[i][26]==1) kolejka.push(n+i); } } else{ a-=n; if(zliczK[a][26]==0)continue; int znajdz = 0; for(i=0;i<26;i++) if(zliczK[a][i]) znajdz = i; zapis.push_back({a+n, znajdz+'A'}); zliczK[a][i] = 0; zliczK[a][26] = 0; for(i=1;i<=n;i++){ if(--zliczW[i][znajdz]==0) if(--zliczW[i][26]==1) kolejka.push(i); } } } printf("%d\n", (int)zapis.size()); while(zapis.size()){ if(zapis.back().first<=n)printf("R %d %c\n", zapis.back().first, zapis.back().second); if(zapis.back().first>n)printf("K %d %c\n", zapis.back().first-n, zapis.back().second); zapis.pop_back(); } }
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 | #include<bits/stdc++.h> using namespace std; char tab[2010][2010]; char slowo[2010]; int zliczW[2010][30]; int zliczK[2010][30]; vector<pair<int, char>>zapis; int main() { int n, m, i, j; scanf("%d%d", &n, &m); for(i=1;i<=n;i++){ scanf("%s", slowo+1); for(j=1;j<=m;j++){ tab[i][j] = slowo[j]; if(zliczW[i][tab[i][j]-'A']++==0) zliczW[i][26]++; if(zliczK[j][tab[i][j]-'A']++==0) zliczK[j][26]++; } } queue<int>kolejka; for(i=1;i<=n;i++){ if(zliczW[i][26]==1) kolejka.push(i); } for(i=1;i<=m;i++){ if(zliczK[i][26]==1) kolejka.push(n+i); } while(kolejka.size()){ int a = kolejka.front(); kolejka.pop(); if(a<=n){ if(zliczW[a][26]==0)continue; int znajdz = 0; for(i=0;i<26;i++) if(zliczW[a][i]) znajdz = i; zapis.push_back({a, znajdz+'A'}); zliczW[a][i] = 0; zliczW[a][26] = 0; for(i=1;i<=m;i++){ if(--zliczK[i][znajdz]==0) if(--zliczK[i][26]==1) kolejka.push(n+i); } } else{ a-=n; if(zliczK[a][26]==0)continue; int znajdz = 0; for(i=0;i<26;i++) if(zliczK[a][i]) znajdz = i; zapis.push_back({a+n, znajdz+'A'}); zliczK[a][i] = 0; zliczK[a][26] = 0; for(i=1;i<=n;i++){ if(--zliczW[i][znajdz]==0) if(--zliczW[i][26]==1) kolejka.push(i); } } } printf("%d\n", (int)zapis.size()); while(zapis.size()){ if(zapis.back().first<=n)printf("R %d %c\n", zapis.back().first, zapis.back().second); if(zapis.back().first>n)printf("K %d %c\n", zapis.back().first-n, zapis.back().second); zapis.pop_back(); } } |