有一个点总是超时
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
short a[1605][1605],b[1605][1605];
char ch;
void shun()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[j][n+1-i]=a[i][j];
swap(n,m);
memcpy(a,b,sizeof b);
}
void ni()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[m+1-j][i]=a[i][j];
swap(n,m);
memcpy(a,b,sizeof b);
}
void shui_ping()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[i][m+1-j]=a[i][j];
memcpy(a,b,sizeof b);
}
void chui_zhi()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[n+1-i][j]=a[i][j];
memcpy(a,b,sizeof b);
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=k;i++)
{
cin>>ch;
switch(ch)
{
case 'A':shun();break;
case 'B':ni();break;
case 'C':shui_ping();break;
case 'D':chui_zhi();break;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
//有优化,但是不多
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
short a[1605][1605],b[1605][1605];
char c[1005];
void shun()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[j][n+1-i]=a[i][j];
swap(n,m);
memcpy(a,b,sizeof b);
}
void ni()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[m+1-j][i]=a[i][j];
swap(n,m);
memcpy(a,b,sizeof b);
}
void shui_ping()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[i][m+1-j]=a[i][j];
memcpy(a,b,sizeof b);
}
void chui_zhi()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
b[n+1-i][j]=a[i][j];
memcpy(a,b,sizeof b);
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=k;i++)
cin>>c[i];
bool ok=true;
while(ok)
{
ok=false;
for(int i=1;i<=k;i++)
{
if(c[i]=='A'&&c[i+1]=='B')
{
for(int j=i;j<=k;j++)
c[j]=c[j+2];
k-=2;ok=true;
}
else if(c[i]=='B'&&c[i+1]=='A')
{
for(int j=i;j<=k;j++)
c[j]=c[j+2];
k-=2;ok=true;
}
else if(c[i]=='C'&&c[i+1]=='C')
{
for(int j=i;j<=k;j++)
c[j]=c[j+2];
k-=2;ok=true;
}
else if(c[i]=='D'&&c[i+1]=='D')
{
for(int j=i;j<=k;j++)
c[j]=c[j+2];
k-=2;ok=true;
}
else if(c[i]=='A'&&c[i+1]=='A'&&c[i+3]=='A'&&c[i+4]=='A')
{
for(int j=i;j<=k;j++)
c[j]=c[j+4];
k-=4;ok=true;
}
else if(c[i]=='B'&&c[i+1]=='B'&&c[i+3]=='B'&&c[i+4]=='B')
{
for(int j=i;j<=k;j++)
c[j]=c[j+4];
k-=4;ok=true;
}
}
}
for(int i=1;i<=k;i++)
{
switch(c[i])
{
case 'A':shun();break;
case 'B':ni();break;
case 'C':shui_ping();break;
case 'D':chui_zhi();break;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}