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
| #include<bits/stdc++.h> #define pb push_back #define eb emplace_back using namespace std; typedef pair<int,int> pii; char s[55][55]; int n,m; int getID(char t) { return t=='L'?0:t=='R'?1:t=='U'?2:3; } void dfs(vector<pii> &a,int x,int y,int tr) { if(s[x][y]==tr) return; if(s[x][y]==0) { dfs(a,x+1,y,0); a.eb(x,y); s[x][y]=s[x][y+1]=2; s[x+1][y]=s[x+1][y+1]=3; return; } else { dfs(a,x,y+1,2); a.eb(x,y); s[x][y]=s[x+1][y]=0; s[x][y+1]=s[x+1][y+1]=1; return; } } void solve(vector<pii> &a) { for(int i=1;i<=n;i++) { scanf("%s",s[i]+1); for(int j=1;j<=m;j++) s[i][j]=getID(s[i][j]); } bool bj=0; if(m&1) { bj=1; swap(n,m); for(int i=1;i<=max(n,m);i++) { for(int j=i+1;j<=max(n,m);j++) { swap(s[i][j],s[j][i]); } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { s[i][j]^=2; } } } for(int i=1;i<=n-1;i++) { for(int j=1;j<=m;j+=2) { dfs(a,i,j,0); } } if(bj) { swap(n,m); for(auto &i:a) swap(i.first,i.second); } } int main() { scanf("%d%d",&n,&m); vector<pii> a; vector<pii> b; solve(a); solve(b); for(int i=b.size()-1;i>=0;i--) a.pb(b[i]); printf("%d\n",(int)a.size()); for(auto &i:a) { printf("%d %d\n",i.first,i.second); } return 0; }
|