#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; } |
English