// 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; const int N=2005; int n,m,a[N][N],sa[N][27],sb[N][27]; pair<int,int>ans[N<<1]; string str; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>str; for(int j=1;j<=m;j++) a[i][j]=str[j-1]-'A'; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sa[i][a[i][j]]++,sb[j][a[i][j]]++; for(int round=n+m;round;round--){ int id=0,jd=0; for(int i=1;i<=n;i++){ int t=0,p=0; for(int j=0;j<26;j++) if(sa[i][j]) t++,p=j; if(t==1){ id=i; jd=p; break; } } if(id){ ans[round]={id,jd}; for(int j=1;j<=m;j++) sa[id][a[id][j]]--,sb[j][a[id][j]]--,a[id][j]=26; continue; } for(int i=1;i<=m;i++){ int t=0,p=0; for(int j=0;j<26;j++) if(sb[i][j]) t++,p=j; if(t==1){ id=i; jd=p; break; } } if(id){ ans[round]={id+n,jd}; for(int j=1;j<=n;j++) sa[j][a[j][id]]--,sb[id][a[j][id]]--,a[j][id]=26; continue; } } int p=1; while(!ans[p].first) p++; cout<<n+m-p+1<<'\n'; for(int i=p;i<=n+m;i++) if(ans[i].first<=n) cout<<"R "<<ans[i].first<<' '<<(char)(ans[i].second+'A')<<'\n'; else cout<<"K "<<ans[i].first-n<<' '<<(char)(ans[i].second+'A')<<'\n'; 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 | // 2024 HOPE IN VALUABLE #include<bits/stdc++.h> using namespace std; const int N=2005; int n,m,a[N][N],sa[N][27],sb[N][27]; pair<int,int>ans[N<<1]; string str; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=1;i<=n;i++){ cin>>str; for(int j=1;j<=m;j++) a[i][j]=str[j-1]-'A'; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) sa[i][a[i][j]]++,sb[j][a[i][j]]++; for(int round=n+m;round;round--){ int id=0,jd=0; for(int i=1;i<=n;i++){ int t=0,p=0; for(int j=0;j<26;j++) if(sa[i][j]) t++,p=j; if(t==1){ id=i; jd=p; break; } } if(id){ ans[round]={id,jd}; for(int j=1;j<=m;j++) sa[id][a[id][j]]--,sb[j][a[id][j]]--,a[id][j]=26; continue; } for(int i=1;i<=m;i++){ int t=0,p=0; for(int j=0;j<26;j++) if(sb[i][j]) t++,p=j; if(t==1){ id=i; jd=p; break; } } if(id){ ans[round]={id+n,jd}; for(int j=1;j<=n;j++) sa[j][a[j][id]]--,sb[id][a[j][id]]--,a[j][id]=26; continue; } } int p=1; while(!ans[p].first) p++; cout<<n+m-p+1<<'\n'; for(int i=p;i<=n+m;i++) if(ans[i].first<=n) cout<<"R "<<ans[i].first<<' '<<(char)(ans[i].second+'A')<<'\n'; else cout<<"K "<<ans[i].first-n<<' '<<(char)(ans[i].second+'A')<<'\n'; return 0; } |