#include<iostream> #include<vector> using namespace std; char c[510][510]; vector<int>v[510]; int n,m; void out(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)cout<<c[i][j]; cout<<'\n'; } return; } void g(){ for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++){ if(c[i][j]!='.')v[j].push_back(c[i][j]); } } for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++){ if(i<=v[j].size())c[i][j]=v[j][i-1]; else c[i][j]='.'; } v[j].clear(); } return; } void d(){ for(int j=1;j<=m;j++){ for(int i=n;i>=1;i--){ if(c[i][j]!='.')v[j].push_back(c[i][j]); } } for(int j=1;j<=m;j++){ for(int i=n;i>=1;i--){ if(n-i+1<=v[j].size())c[i][j]=v[j][n-i]; else c[i][j]='.'; } v[j].clear(); } return; } void l(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(c[i][j]!='.')v[i].push_back(c[i][j]); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(j<=v[i].size())c[i][j]=v[i][j-1]; else c[i][j]='.'; } v[i].clear(); } return; } void p(){ for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(c[i][j]!='.')v[i].push_back(c[i][j]); } } for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(m-j+1<=v[i].size())c[i][j]=v[i][m-j]; else c[i][j]='.'; } v[i].clear(); } return; } void rob(string a,int il){ for(int x=0;x<il;x++){ if(a[x]=='G')g(); if(a[x]=='D')d(); if(a[x]=='L')l(); if(a[x]=='P')p(); //out(); //cout<<'\n'; } return; } string a,s; void dod(int x,int y){ if(y<0){ s+=a[x]; return; } if(a[x]!=s[y]){ if(a[x]!=s[y+1]&&((a[x]=='G'&&s[y+1]!='D')||(a[x]=='D'&&s[y+1]!='G')||(a[x]=='L'&&s[y+1]!='P')||(a[x]=='P'&&s[y+1]!='L'))){ s+=a[x]; return; } else if(a[x]!=s[y+1]){ s.pop_back(); dod(x,y-1); return; } } return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k,akt=0; char ost[2]={0,0}; char pp[2]={0,0}; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>c[i][j]; } } cin>>k>>s; //cout<<"\n\n"; for(int i=1;i<k;i++){ if((s[i]!=s[i-1])&&((s[i]=='G'&&s[i-1]!='D')||(s[i]=='D'&&s[i-1]!='G')||(s[i]=='L'&&s[i-1]!='P')||(s[i]=='P'&&s[i-1]!='L'))){ a+=s[i-1]; } //cout<<a<<'\n'; } a+=s[k-1]; if(a.size()==1){ rob(a,1); out(); return 0; } s=a[0]; s+=a[1]; //cout<<"\n\na = "<<a<<'\n'; for(int i=2;i<a.size();i++){ dod(i,s.size()-2); //cout<<s<<" a dodalem "<<a[i]<<'\n'; } //cout<<"s = "<<s<<"\n\n"; if(s.size()<500)rob(s,s.size()); else rob(s,min(s.size(),256+s.size()%256)); out(); 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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #include<iostream> #include<vector> using namespace std; char c[510][510]; vector<int>v[510]; int n,m; void out(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)cout<<c[i][j]; cout<<'\n'; } return; } void g(){ for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++){ if(c[i][j]!='.')v[j].push_back(c[i][j]); } } for(int j=1;j<=m;j++){ for(int i=1;i<=n;i++){ if(i<=v[j].size())c[i][j]=v[j][i-1]; else c[i][j]='.'; } v[j].clear(); } return; } void d(){ for(int j=1;j<=m;j++){ for(int i=n;i>=1;i--){ if(c[i][j]!='.')v[j].push_back(c[i][j]); } } for(int j=1;j<=m;j++){ for(int i=n;i>=1;i--){ if(n-i+1<=v[j].size())c[i][j]=v[j][n-i]; else c[i][j]='.'; } v[j].clear(); } return; } void l(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(c[i][j]!='.')v[i].push_back(c[i][j]); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(j<=v[i].size())c[i][j]=v[i][j-1]; else c[i][j]='.'; } v[i].clear(); } return; } void p(){ for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(c[i][j]!='.')v[i].push_back(c[i][j]); } } for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(m-j+1<=v[i].size())c[i][j]=v[i][m-j]; else c[i][j]='.'; } v[i].clear(); } return; } void rob(string a,int il){ for(int x=0;x<il;x++){ if(a[x]=='G')g(); if(a[x]=='D')d(); if(a[x]=='L')l(); if(a[x]=='P')p(); //out(); //cout<<'\n'; } return; } string a,s; void dod(int x,int y){ if(y<0){ s+=a[x]; return; } if(a[x]!=s[y]){ if(a[x]!=s[y+1]&&((a[x]=='G'&&s[y+1]!='D')||(a[x]=='D'&&s[y+1]!='G')||(a[x]=='L'&&s[y+1]!='P')||(a[x]=='P'&&s[y+1]!='L'))){ s+=a[x]; return; } else if(a[x]!=s[y+1]){ s.pop_back(); dod(x,y-1); return; } } return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k,akt=0; char ost[2]={0,0}; char pp[2]={0,0}; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>c[i][j]; } } cin>>k>>s; //cout<<"\n\n"; for(int i=1;i<k;i++){ if((s[i]!=s[i-1])&&((s[i]=='G'&&s[i-1]!='D')||(s[i]=='D'&&s[i-1]!='G')||(s[i]=='L'&&s[i-1]!='P')||(s[i]=='P'&&s[i-1]!='L'))){ a+=s[i-1]; } //cout<<a<<'\n'; } a+=s[k-1]; if(a.size()==1){ rob(a,1); out(); return 0; } s=a[0]; s+=a[1]; //cout<<"\n\na = "<<a<<'\n'; for(int i=2;i<a.size();i++){ dod(i,s.size()-2); //cout<<s<<" a dodalem "<<a[i]<<'\n'; } //cout<<"s = "<<s<<"\n\n"; if(s.size()<500)rob(s,s.size()); else rob(s,min(s.size(),256+s.size()%256)); out(); return 0; } |