zoukankan      html  css  js  c++  java
  • 第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,m);
                for(int i=0;i<n;i++)
                printf("%s
    ",ma[i]);
            }
            else if(x==1)
            {   
                printf("%d %d
    ",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("
    ");
                }
            }
            else if(x==2)
            {   
                printf("%d %d
    ",n,m);
                for(int i=n-1;i>=0;i--)
                {
                    for(int j=m-1;j>=0;j--)
                    {
                    printf("%c",ma[i][j]);
                    }
                    printf("
    ");
                }
            }
            else if(x==3)
            {  
                 printf("%d %d
    ",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("
    ");
                }
            }      
                printf("
    ");     
        }
        return 0;
    }
  • 相关阅读:
    spring core源码解读之ASM4用户手册翻译之一asm简介
    nginx启动,重启,关闭命令
    linux LVM分区查看dm设备
    jdbc 对sqlite的基本操作
    linux配置多个ip
    细说Linux下的虚拟主机那些事儿
    打造字符界面的多媒体Linux系统
    linux计划crontab
    因修改/etc/ssh权限导致的ssh不能连接异常解决方法
    Linux修改主机名
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/8995972.html
Copyright © 2011-2022 走看看