本文主要是介绍第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵(模拟),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经济,更舒适”作为公司使命,通过产业融合、建设智能汽车出行行业的方式,打造“利国、利民、利公司、利个人”的无人驾驶出行系统。公司的愿景是成为中国第一、世界一流的智能出行公司。
有一天,景驰公司的工程师在真车上做测试。
景驰公司的试验车上面有一个奇怪的图案,这是一个n*m的矩阵,这辆车可以到处开,每次可以左旋右旋,小明想知道转完之后的图案是怎么样的
具体来说:有一个n*m的字符矩阵,只包含3种字符(‘+’‘-’,‘|’),通过一通乱旋之后变成什么样子? 输入描述:
第一行测试样例数T(0
输出描述:
第一行两个正整数n,m 接下来的n行是一个n*m的字符矩阵
每个样例后面输出一个空行
输入
2
2 3
+-+
|+|
LLRRR3 2
-+
+|
-+
LLL
输出
3 2
-+
+|
-+2 3
|+|
+-+
备注: 左旋即逆时针旋转,右旋即顺时针旋转
-通过一次左旋或右旋会变成| |通过一次左旋或右旋会变成-
思路
先计算出L和R的数量,然后通过互相减的方式可以把问题简化成向左转一次或者两次或者三次,然后直接模拟就好了。注意细节。
代码
#include <cstdio>
#include <cstring>
#include <cctype>
#include <stdlib.h>
#include <string>
#include <map>
#include <iostream>
#include <stack>
#include <cmath>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
#define inf 1000000
#define mem(a,b) memset(a,b,sizeof(a))
const int N=30+7;
char s[N][N];
char str[1010];
int main()
{int t,n,m;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i=0; i<n; i++)scanf("%s",s[i]);scanf("%s",str);int len=strlen(str);int sum1=0,sum2=0;for(int i=0; i<len; i++)if(str[i]=='L')sum1++;elsesum2++;if(sum1==sum2){printf("%d %d\n",n,m);for(int i=0; i<n; i++)printf("%s\n",s[i]);}else if(sum1>sum2)//左{sum1-=sum2;sum1%=4;if(sum1==0){printf("%d %d\n",n,m);for(int i=0; i<n; i++)printf("%s\n",s[i]);}else if(sum1==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",s[i][j]);puts("");}}else if(sum1==3){printf("%d %d\n",m,n);for(int i=0; i<m; i++){for(int j=n-1; j>=0; j--){if(s[j][i]=='-')cout<<"|";else if(s[j][i]=='|')cout<<"-";elsecout<<s[j][i];}cout<<endl;}}else if(sum1==1){printf("%d %d\n",m,n);for(int i=m-1; i>=0; i--){for(int j=0; j<n; j++){if(s[j][i]=='-')cout<<"|";else if(s[j][i]=='|')cout<<"-";elsecout<<s[j][i];}cout<<endl;}}}else{sum2-=sum1;//右sum2%=4;if(sum2==0){printf("%d %d\n",n,m);for(int i=0; i<n; i++)printf("%s\n",s[i]);}else if(sum2==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",s[i][j]);puts("");}}else if(sum2==3){printf("%d %d\n",m,n);for(int i=m-1; i>=0; i--){for(int j=0; j<n; j++){if(s[j][i]=='-')cout<<"|";else if(s[j][i]=='|')cout<<"-";elsecout<<s[j][i];}cout<<endl;}}else if(sum2==1){printf("%d %d\n",m,n);for(int i=0; i<m; i++){for(int j=n-1; j>=0; j--){if(s[j][i]=='-')cout<<"|";else if(s[j][i]=='|')cout<<"-";elsecout<<s[j][i];}cout<<endl;}}}printf("\n");}return 0;
}
这篇关于第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!