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

本文主要是介绍第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 旋转矩阵(模拟)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152264

相关文章

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点