#include <bits/stdc++.h> #define f first #define s second using namespace std; const int SIZE=2005; int tab[SIZE][SIZE]; bool V[SIZE][2]; int N,M; int sum; int suw; int suk; int d; int Z; pair<bool,int> CHECKw(int x){ Z=0; for(int i=1;i<=M;++i){ if(!V[i][0]){ if(Z!=tab[x][i]){ if(Z){return{0,0};} Z=tab[x][i]; } } } return {1,Z}; } pair<bool,int> CHECKk(int x){ Z=0; for(int i=1;i<=N;++i){ if(!V[i][1]){ if(Z!=tab[i][x]){ if(Z){return{0,0};} Z=tab[i][x]; } } } return {1,Z}; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string t; cin>>N>>M; sum=M*N; suw=0; suk=0; for(int i=1;i<=N;++i){ cin>>t; for(int j=0;j<M;++j){ tab[i][j+1]=int(t[j]); } } stack< pair<char,pair<int,int>> > Q; pair<char,pair<int,int>> res1; pair<bool,int> res; int mod=1; while(sum){ if(mod%2){ for(int i=1;i<=N;++i){ if(V[i][1]){continue;} res=CHECKw(i); if(res.f&&res.s){ //CLEARw(i); sum-=M-suk; suw++; V[i][1]=true; Q.push({'R',{i,res.s}}); } } }else{ for(int i=1;i<=M;++i){ if(V[i][0]){continue;} res=CHECKk(i); if(res.f&&res.s){ //CLEARk(i); sum-=N-suw; suk++; V[i][0]=true; Q.push({'K',{i,res.s}}); } } } mod++; } d=Q.size(); cout<<d<<endl; for(int i=0;i<d;++i){ res1=Q.top(); Q.pop(); cout<<res1.f<<' '<<res1.s.f<<' '<<char(res1.s.s)<<"\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 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 | #include <bits/stdc++.h> #define f first #define s second using namespace std; const int SIZE=2005; int tab[SIZE][SIZE]; bool V[SIZE][2]; int N,M; int sum; int suw; int suk; int d; int Z; pair<bool,int> CHECKw(int x){ Z=0; for(int i=1;i<=M;++i){ if(!V[i][0]){ if(Z!=tab[x][i]){ if(Z){return{0,0};} Z=tab[x][i]; } } } return {1,Z}; } pair<bool,int> CHECKk(int x){ Z=0; for(int i=1;i<=N;++i){ if(!V[i][1]){ if(Z!=tab[i][x]){ if(Z){return{0,0};} Z=tab[i][x]; } } } return {1,Z}; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string t; cin>>N>>M; sum=M*N; suw=0; suk=0; for(int i=1;i<=N;++i){ cin>>t; for(int j=0;j<M;++j){ tab[i][j+1]=int(t[j]); } } stack< pair<char,pair<int,int>> > Q; pair<char,pair<int,int>> res1; pair<bool,int> res; int mod=1; while(sum){ if(mod%2){ for(int i=1;i<=N;++i){ if(V[i][1]){continue;} res=CHECKw(i); if(res.f&&res.s){ //CLEARw(i); sum-=M-suk; suw++; V[i][1]=true; Q.push({'R',{i,res.s}}); } } }else{ for(int i=1;i<=M;++i){ if(V[i][0]){continue;} res=CHECKk(i); if(res.f&&res.s){ //CLEARk(i); sum-=N-suw; suk++; V[i][0]=true; Q.push({'K',{i,res.s}}); } } } mod++; } d=Q.size(); cout<<d<<endl; for(int i=0;i<d;++i){ res1=Q.top(); Q.pop(); cout<<res1.f<<' '<<res1.s.f<<' '<<char(res1.s.s)<<"\n"; } return 0;} |