位图[bitmap],也叫做点阵图,栅格图像,像素图。如上图所示,是由nm个点组成,每个点显示一种颜色就形成了图形,最小单位是像素。一个点的颜色一般用一个整数表示,因此一幅点阵图我们常常用一个nm的矩阵保存,矩阵的元素值代表该点的颜色。
给定一个n行m列的图像各像素点的颜色值,对该图像有4种操作:
1)顺时针旋转90度;2)逆时针旋转90度;3)水平翻转;4)垂直翻转。对其有一系列操作,输出经过一系列操作后新图像各点的颜色值
【输入格式】
第一行 三个整数n、m、p分别表示行数、列数、操作次数(1<=n<=1600;1<=m<=1200;1<=p<=1000)
第2至第n+1行,每行m个整数,每个整数用一个空格隔开
第n+2行,有p个大写字母(A 表示顺时针旋转90度 ;B表示逆时针旋转90度;C表示水平翻转;D表示垂直翻转)表示操作的种类,每个字母由一个空格隔开。
【输出格式】n’行,每行m’个整数,每个整数由一个空格隔开
样例输入
3 3 1
1 2 3
4 5 6
7 8 9
A
样例输出
7 4 1
8 5 2
9 6 3
#include<bits/stdc++.h>
using namespace std;
int a[1605][1205],b[1605][1205],m,n,k;
char s;
void CwAcw()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s=='A')
b[j][n+1-i]=a[i][j];
else
b[m+1-j][i]=a[i][j];
swap(n,m);memcpy(a,b,sizeof b);
}
void LvPd()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s=='C')
b[i][m+1-j]=a[i][j];
else
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>>s;
switch(s)
{
case 'A':case 'B':CwAcw();break;
default:LvPd();
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}

总是超时,代码可以怎样优化?