第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--G-旋转矩阵

链接:https://www.nowcoder.com/acm/contest/90/G
来源:牛客网

  • 1.题目描述
    景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经济,更舒适”作为公司使命,通过产业融合、建设智能汽车出行行业的方式,打造“利国、利民、利公司、利个人”的无人驾驶出行系统。公司的愿景是成为中国第一、世界一流的智能出行公司。
    有一天,景驰公司的工程师在真车上做测试。
    景驰公司的试验车上面有一个奇怪的图案,这是一个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的字符矩阵
    每个样例后面输出一个空行
    示例1
    输入
    2
    2 3
    +-+
    |+|
    LLRRR
    3 2
    -+
    +|
    -+
    LLL
    输出
    3 2
    -+
    +|
    -+
    2 3
    |+|
    +-+
    备注:
    左旋即逆时针旋转,右旋即顺时针旋转
    -通过一次左旋或右旋会变成|
    |通过一次左旋或右旋会变成-
  • 2.题目分析
    直接模拟这个过程,首先假定一个旋转方向,然后以此为标准累计旋转次数(同向+1,反向-1),对4取模(一个方向转4次就和原来一样了),这样就只有四种可能性,转0,1,2,3次,把每种可能旋转的输出写出来就是答案,但是过程不那么容易,需要耐心。
  • 3.代码如下
#include<cstdio> 
#include<cstring> 
#include<algorithm> 
#include<iostream> 
#include<string> 
#include<vector> 
#include<stack> 
#include<bitset>
#include<cstdio> 
#include<cstdlib> 
#include<cmath> 
#include<set> 
#include<list> 
#include<deque> 
#include<map> 
#include<queue>
#include<algorithm> 
using namespace std; 
typedef long long ll; 
const double PI = acos(-1.0); 
const double eps = 1e-6; 
const int INF = 1000000000; 
const int maxn = 100; 
char str1[2000],s2[2000];
int dp[100005];
int T,n,count;
char ma[40][40];
char sss[1005];
int main()
{  
    int T;
    scanf("%d",&T);
    while(T--)
    {   
        int n,m;
        memset(ma,0,sizeof(ma));     
        scanf("%d%d",&n,&m);         
        for(int i=0;i<n;i++)
        scanf("%s",ma[i]);  
        scanf("%s",sss);
        int x=0;
        for(int i=0;sss[i];i++)
        {
            if(sss[i]=='L') x++;
            else x--;
            x=(x+4)%4;
        }
        if(x==0)
        {  
            printf("%d %d\n",n,m);
            for(int i=0;i<n;i++)
            printf("%s\n",ma[i]);
        }
        else if(x==1)
        {   
            printf("%d %d\n",m,n);
            for(int i=m-1;i>=0;i--)
            {
                for(int j=0;j<n;j++)
                {   
                if(ma[j][i]=='-') printf("|");
                else if(ma[j][i]=='|') printf("-");
                else printf("%c",ma[j][i]);
                }
                printf("\n");
            }
        }
        else if(x==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",ma[i][j]);
                }
                printf("\n");
            }
        }
        else if(x==3)
        {  
             printf("%d %d\n",m,n); 
            for(int j=0;j<m;j++)
            {
                for(int i=n-1;i>=0;i--)           
                {   
                if(ma[i][j]=='-') printf("|");
                else if(ma[i][j]=='|') printf("-");
                else printf("%c",ma[i][j]);
                }
                printf("\n");
            }
        }      
            printf("\n");     
    }
    return 0;
}
posted @ 2018-03-26 20:03  Chasssser  阅读(218)  评论(0编辑  收藏  举报