【作业】Mental Rotation (模拟)
题目链接:https://vjudge.net/contest/345791#problem/L
【问题描述】
Mental rotation is a difficult thing to master. Mental rotation is the ability to imagine in your mind how an object would look like from a viewer's side if you were to rotate it in a particular direction. It is something very important for engineers to learn and master, especially if you are required to do engineering drawing. There are many stages to these mental rotation tasks. We will approach a simple rotation task in this problem.
If you are given the following square -
After rotating it to the right once, it will look like the following -
After rotating it to the left once, it will look like the following -
For this problem you will be given an initial square of size n and a list of rotations to perform.
Your task is to output the final representation of the square after performing all the rotation.
输入:
The first line of input contains an integer NN (1 ≤ N ≤ 1000). and a string containing a combination of ′L′ and ′R′′. Where ′L′ means left rotation and ′R′ means right rotation. Length of the string will not exceed 100. Starting from the second line, the following N line each will contain NN of the following characters (>, <, ∨, ∧ or .). Empty space is indicated by a '.' (dot).
输出:
The output should be N lines, each containing N characters representing the final representation of the square after all the rotation. For ∨ and ∧ use v (small v) and Shift+6 respectively.
样例输入:
3 R
>v>
...
<^<
3 L
>v>
...
<^<
3 LL
>v>
...
<^< 样例输出:
^.v
>.<
^.v
^.v
>.<
^.v
>v>
...
<^< 试题分析:
这是一道简单的模拟题,我们可以写出向左向右翻转的函数,然后直接遍历字符串即可。但这样会超时,可以进行优化,翻转周期为4,并且可以将左转转化为右转。
代码如下:
#include<stdio.h>
#include<map>
#include<string.h>
const int MAXN = ;
using namespace std; int n;
char s[MAXN], ans[MAXN][MAXN], str[MAXN][MAXN];
map<char, char> mp; void move()
{
for(int col = ; col <= n; col ++)
for(int row = n; row >= ; row --)
ans[col][n - row + ] = mp[str[row][col]];
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
str[i][j] = ans[i][j];
} int main()
{
mp['>'] = 'v', mp['^'] = '>', mp['v'] = '<', mp['<'] = '^', mp['.'] = '.'; scanf("%d%s", &n, s);
getchar();
for(int i = ; i <= n; i ++)
scanf("%s", str[i] + );
for(int i = ; i <= n; i ++)
for(int j = ; j <= n; j ++)
ans[i][j] = str[i][j];
int len = strlen(s);
int rnum = , lnum = ;
for(int i = ; i < len; i ++)
{
if(s[i] == 'R')
rnum ++;
else
lnum ++;
}
if(rnum >= lnum)
{
rnum -= lnum;
rnum %= ;
}
else
{
lnum -= rnum;
lnum %= ;
rnum = - lnum;
rnum %= ;
}
for(int i = ; i <= rnum; i ++)
move();
for(int i = ; i <= n; i ++)
printf("%s\n", ans[i] + );
return ;
}
【作业】Mental Rotation (模拟)的更多相关文章
- C#基础第三天-作业-集合-冒泡排序-模拟名片
1.名片:用两种集合(ArrayList/List<>)去输出余下信息.身份证号码,电话号码,性别,姓名,身高,年龄,体重.需求:根据 姓名 去查询某一行数据.如果集合中不存在提示(“自定 ...
- python开发基础作业01:模拟登陆系统
随老男孩学习python mark 作业要求及提示:编写登录接口 ''' 练习程序:编写登录接口 1. 输入用户名和密码 2. 认证成功后显示欢迎信息 3. 输错三次后锁定 输入三次后退出,下次同样用 ...
- 从零开始学Python04作业思路:模拟ATM电子银行
标签(空格分隔):Python 一,程序文件说明 程序分为5个组成部分 bin:放置Python程序的启动接口文件 通过Python命令启动文件夹内文件即正常执行Python程序 例如:ATM_sta ...
- 作业三:模拟 mysql 进行增删改查
# !/usr/bin/env python3 # _*_coding:utf-8_*_ def help_sql(cmd): if cmd in func_dic.keys(): print('{} ...
- C#基础第三天-作业答案-集合-冒泡排序-模拟名片
.冒泡排序 Console.WriteLine("对集合里的数进行排序,请输入第一个数:"); int a = int.Parse(Console.ReadLine()); Con ...
- python作业模拟计算器开发(第五周)
作业需求: 模拟计算器开发: 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/1 ...
- day4作业模拟实现一个ATM + 购物商城程序
作业需求: 模拟实现一个ATM + 购物商城程序 1.额度 15000或自定义: 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账: 3.可以提现,手续费5%: 4.每月22号出账单,每月10 ...
- SQL Server代理(10/12):使用代理账号运行作业
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这一系列的上一篇,你查看了msdb库下用 ...
- SQL Server代理(9/12):理解作业和安全
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的前一篇文章里,你学习了如何在S ...
随机推荐
- JSP带有标签体的自定义标签
新建OutTag类 如何添加jsp-api.jar包 OutTag类详细代码 ``` package bid.zhazhapan.fims.tag; import javax.servlet.jsp. ...
- Hadoop NameNode 元数据以及查看元数据的方式
HDFS中NameNode工作机制1.NameNode的主要功能(1)负责客户端请求的响应: (2)负责元数据的管理. 2.元数据管理namenode对数据管理采用了三种存储形式: (1)内存元数据: ...
- shell脚本编程基础介绍
Linux系统——shell脚本编程基础介绍 1.什么是shell 它是一个命令解释器,在linux/unix操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种操作输出的结果 ...
- NAT双线路配置详解
- 记录vsCode配置node开发环境
环境:win10,idea:vscode 1:安装Visual Studio Code 下一步下一步.(很早之前就安装了). 2:安装node. http://nodejs.cn/download/ ...
- 2018-2019-2 网络对抗技术 20165322 Exp8 Web基础
2018-2019-2 网络对抗技术 20165322 Exp8 Web基础 目录 实验原理 实验内容与步骤 Web前端HTML Web前端javascipt Web后端:MySQL基础:正常安装.启 ...
- C#中使用typeof关键字和GetType()获取类的内部结构(反射机制)
一.问题描述 java有反射机制,C#也有反射机制,在C#中typeof关键字用于获取类型的System.Type对象,该对象的GetMethods()方法可以得到类型中定义的方法对象的计集合,调用方 ...
- C/C++ #define的作用域
#define #define macro的作用域有点类似于C/C++全局静态变量 编译器处理宏的时机是预处理阶段 编译器按文本顺序处理 遇到宏时就定义一个宏变量 假设这种情况 void test() ...
- MiniUI treeGrid 动态加载数据与静态加载数据的区别
说明:treegrid静态数据加载时数据结构是一棵树包含children节点集合,而采用动态加载数据时数据是List结构的具体项. 静态加载数据 test1.html <!DOCTYPE htm ...
- Linux openkvm disk expansion
How to Increase the size of a Linux LVM by expanding the virtual machine disk https://www.rootusers. ...