题目链接
https://www.nowcoder.com/acm/contest/90/G
题目
链接:https://www.nowcoder.com/acm/contest/90/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经济,更舒适”作为公司使命,通过产业融合、建设智能汽车出行行业的方式,打造“利国、利民、利公司、利个人”的无人驾驶出行系统。公司的愿景是成为中国第一、世界一流的智能出行公司。
有一天,景驰公司的工程师在真车上做测试。
景驰公司的试验车上面有一个奇怪的图案,这是一个n*m的矩阵,这辆车可以到处开,每次可以左旋右旋,小明想知道转完之后的图案是怎么样的
具体来说:有一个n*m的字符矩阵,只包含3种字符(‘+’‘-’,‘|’),通过一通乱旋之后变成什么样子?
输入描述:
第一行测试样例数T(0
分析
在纸上模拟一边旋转过程,注意到左旋1次相当于右旋4-1次,左旋L次右旋R次相当于右旋sum=R-L次。如果sum小于0,循环累加4直到其大于0.
这样就统统转化成右旋问题了。
而右旋n次与右旋n%4次无异,所以只要找出0,1,2,3四类右旋的规律即可。
如果右旋的次数是奇数,则将原始字符矩阵中的-变成|,|变成-。否则,原始字符矩阵不变
。
右旋0次:最终矩阵就是原始矩阵。
右旋1次:最终矩阵的第1行就是原始矩阵的第m列的逆序。
右旋2次:最终矩阵的第1行就是原始矩阵的第n行的逆序。
右旋3次:最终矩阵的第1行就是原始矩阵的第m列。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
using namespace std;
const int maxn=40;
typedef long long ll;
char a[maxn][maxn],b[maxn][maxn],s[1100];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
scanf("%s",a[i]);
scanf("%s",s);
int len=strlen(s);
int L=0,R=0;
for(int i=0; i<len; i++)
{
if(s[i]=='L')
L++;
else if(s[i]=='R')
R++;
}
len=R-L;
while(len<0)
len+=4;
len%=4;
if(len&1)
{
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
if(a[i][j]=='-')
a[i][j]='|';
else if(a[i][j]=='|')
a[i][j]='-';
}
}
if(len==0)
{
printf("%d %d\n",n,m);
for(int i=0; i<n; i++)
printf("%s\n",a[i]);
}
else if(len==1)
{
printf("%d %d\n",m,n);
for(int j=0; j<m; j++)
{
for(int i=n-1; i>=0; i--)
printf("%c",a[i][j]);
printf("\n");
}
}
else if(len==2)
{
printf("%d %d\n",n,m);
for(int i=n-1; i>=0; i--)
{
for(int j=m-1; j>=0; j--)
printf("%c",a[i][j]);
printf("\n");
}
}
else if(len==3)
{
printf("%d %d\n",m,n);
for(int j=m-1; j>=0; j--)
{
for(int i=0; i<n; i++)
printf("%c",a[i][j]);
printf("\n");
}
}
printf("\n");
}
return 0;
}