#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(); } } |
English