链接:https://www.nowcoder.com/acm/contest/90/G
来源:牛客网
题目描述
景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经济,更舒适”作为公司使命,通过产业融合、建设智能汽车出行行业的方式,打造“利国、利民、利公司、利个人”的无人驾驶出行系统。公司的愿景是成为中国第一、世界一流的智能出行公司。
有一天,景驰公司的工程师在真车上做测试。 景驰公司的试验车上面有一个奇怪的图案,这是一个n*m的矩阵,这辆车可以到处开,每次可以左旋右旋,小明想知道转完之后的图案是怎么样的
具体来说:有一个n*m的字符矩阵,只包含3种字符(‘+’‘-’,‘|’),通过一通乱旋之后变成什么样子?
输入描述:
第一行测试样例数T(0<T<=100) 每个测试样例第一行两个正整数n,m(0<n,m<=30) 接下来的n行是一个n*m的字符矩阵 字符矩阵之后是一串只包含‘L’(左旋)和‘R’(右旋)的字符串,长度不超过1000 每个样例间输出一个空行
输出描述:
第一行两个正整数n,m 接下来的n行是一个n*m的字符矩阵 每个样例后面输出一个空行
注意:-通过一次左旋或右旋会变成|
|通过一次左旋或右旋会变成-
在模拟旋转时-,|旋转后并不会改变,所以我们应该创建一个从-到|,|到-的映射,这样才能保证在旋转时-,|改变
代码:
#include<stdio.h>
#include<map>
#include<string.h>
#include<math.h>
using namespace std;
/*
链接:https://www.nowcoder.com/acm/contest/90/G
来源:牛客网
2
2 3
+-+
|+|
LLRRR
3 2
-+
+|
-+
LLL
输出
3 2
-+
+|
-+
2 3
|+|
+-+
*/
int main()
{
int t;
scanf("%d",&t);
map<char,char> mp;
mp.insert(make_pair('+','+')); //创建一个从-到|,|到-的映射
mp.insert(make_pair('-','|'));
mp.insert(make_pair('|','-'));
while(t--)
{
char data[35][35],mark[1005];
int n,m,result=0;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
scanf("%s",data[i]);
/* for(int i=0;i<n;i++)
printf("%s\n",data[i]);
*/
scanf("%s",mark);
for(int i=0;i<strlen(mark);i++)
result+=mark[i]=='L'?-1:1;
result=(result+1000*4)%4;
if(result==0)
{
printf("%d %d\n",n,m);
for(int i=0;i<n;i++)
printf("%s\n",data[i]);
printf("\n");
}
else
{
int n1=m, m1=n;
for(int k=1;k<=result;k++)
{
char temp[35][35];
int i1=0;
for(int i=0;i<n1;i++)
{
int j1=0;
for(int j=m1-1;j>=0;j--)
{
temp[i1][j1]=mp.find(data[j][i])->second; //保证-,|在旋转时改变
j1++;
}
i1++;
}
/*
*/
if(k==result)
{
printf("%d %d\n",n1,m1);
for(int i2=0;i2<n1;i2++)
{
for(int j2=0;j2<m1;j2++)
printf("%c",temp[i2][j2]);
printf("\n");
}
printf("\n");
}
memcpy(data,temp,sizeof(temp));
int temp1=m1;
m1=n1,n1=temp1;
}
}
}
return 0;
}