#include <bits/stdc++.h>
using namespace std;
struct kolor{
vector<int>k;
kolor(){
for(int i=0;i<27;i++){
k.push_back(0);
}
};
};
struct polecenie{
int kol;
int kier;//0->wiersz, 1->kolumna
int y;
polecenie(int a,int b,int c){
kol=a;
kier=b;
y=c;
//cout<<kol<<" "<<kier<<" "<<y<<endl;
}
};
bool czy_puste(vector<set<int>>w,vector<set<int>>k,int n,int m){
for(int i=0;i<n;i++){
if(w[i].empty()==false){
return false;
}
}
for(int i=0;i<m;i++){
if(k[i].empty()==false){
return false;
}
}
return true;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
vector<string>in;
for(int i=0;i<n;i++){
string l;
cin>>l;
in.push_back(l);
}
map<char,int>na_liczby;
for(int i=65;i<91;i++){
na_liczby[i]=i-65;
}
string alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
vector<set<int>>kol(m);
vector<set<int>>wier(n);
vector<kolor>K(m);
vector<kolor>W(n);
vector<polecenie>ans;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
wier[i].insert(na_liczby[in[i][j]]);
W[i].k[na_liczby[in[i][j]]]++;
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
kol[i].insert(na_liczby[in[j][i]]);
K[i].k[na_liczby[in[j][i]]]++;
}
}
while(czy_puste(wier,kol,n,m)==false){
for(int i=0;i<n;i++){
if(wier[i].size()==1){
auto it=wier[i].begin();
int x=*it;
//cout<<x<<endl;
for(int j=0;j<m;j++){
K[j].k[(x)]--;
if(K[j].k[(x)]<=0){
if(kol[j].find(x)!=kol[j].end()){
kol[j].erase(x);
}
}
}
wier[i].erase(x);
polecenie p(x,0,i+1);
ans.push_back(p);
}
}
for(int i=0;i<m;i++){
if(kol[i].size()==1){
auto it=kol[i].begin();
//cout<<*it<<endl;
int x=*it;
for(int j=0;j<n;j++){
W[j].k[(x)]--;
if(W[j].k[(x)]<=0){
if(wier[j].find(x)!=wier[j].end()){
wier[j].erase(x);
}
}
}
kol[i].erase(x);
polecenie p(x,1,i+1);
ans.push_back(p);
}
}
}
cout<<ans.size()<<'\n';
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++){
if(ans[i].kier==0){
cout<<"R ";
}
else{
cout<<"K ";
}
cout<<ans[i].y<<" ";
cout<<alfabet[ans[i].kol]<<'\n';
}
}
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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | #include <bits/stdc++.h> using namespace std; struct kolor{ vector<int>k; kolor(){ for(int i=0;i<27;i++){ k.push_back(0); } }; }; struct polecenie{ int kol; int kier;//0->wiersz, 1->kolumna int y; polecenie(int a,int b,int c){ kol=a; kier=b; y=c; //cout<<kol<<" "<<kier<<" "<<y<<endl; } }; bool czy_puste(vector<set<int>>w,vector<set<int>>k,int n,int m){ for(int i=0;i<n;i++){ if(w[i].empty()==false){ return false; } } for(int i=0;i<m;i++){ if(k[i].empty()==false){ return false; } } return true; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; vector<string>in; for(int i=0;i<n;i++){ string l; cin>>l; in.push_back(l); } map<char,int>na_liczby; for(int i=65;i<91;i++){ na_liczby[i]=i-65; } string alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; vector<set<int>>kol(m); vector<set<int>>wier(n); vector<kolor>K(m); vector<kolor>W(n); vector<polecenie>ans; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ wier[i].insert(na_liczby[in[i][j]]); W[i].k[na_liczby[in[i][j]]]++; } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ kol[i].insert(na_liczby[in[j][i]]); K[i].k[na_liczby[in[j][i]]]++; } } while(czy_puste(wier,kol,n,m)==false){ for(int i=0;i<n;i++){ if(wier[i].size()==1){ auto it=wier[i].begin(); int x=*it; //cout<<x<<endl; for(int j=0;j<m;j++){ K[j].k[(x)]--; if(K[j].k[(x)]<=0){ if(kol[j].find(x)!=kol[j].end()){ kol[j].erase(x); } } } wier[i].erase(x); polecenie p(x,0,i+1); ans.push_back(p); } } for(int i=0;i<m;i++){ if(kol[i].size()==1){ auto it=kol[i].begin(); //cout<<*it<<endl; int x=*it; for(int j=0;j<n;j++){ W[j].k[(x)]--; if(W[j].k[(x)]<=0){ if(wier[j].find(x)!=wier[j].end()){ wier[j].erase(x); } } } kol[i].erase(x); polecenie p(x,1,i+1); ans.push_back(p); } } } cout<<ans.size()<<'\n'; reverse(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++){ if(ans[i].kier==0){ cout<<"R "; } else{ cout<<"K "; } cout<<ans[i].y<<" "; cout<<alfabet[ans[i].kol]<<'\n'; } } |
English