点击打开链接

链接: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;
}