P2033 Chessboard Dance
题目描述
在棋盘上跳舞是件有意思的事情。现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向。求按一定操作后,棋盘的状态。
操作有四种,描述如下:
move n n是非负整数,表示你按目前所在方向前进n步,如果即将走出棋盘,则停止。如果面前有棋子,则将其向前推一步。
turn left 向左转90度
turn right 向右转90度
turn back 向后转
输入格式
输入前8行,每行8个字符,给出棋盘状态。“.”表示该格为空,字母表示棋子,不同字母表示不同的棋子。你所在位置用“^”、“<”、“>”、“v”四个字母中一个表示,分别表示你的方向上、左、右、下。
接下来有若干行,每行一个操作。以“#”结束。操作数不超过1000个。
输出格式
输出8行,每行8个字符,表示经过一系列操作后棋盘和你的状态。表示方法同输入。
输入输出样例
输入
......bA
.....^..
........
........
........
........
........
........
move 2
turn right
move 1
#
输出
......>b
........
........
........
........
........
........
........
分析
如果前面是空地,直接向前走。
如果前面是字符,先遍历字符前面的点,如果遍历到一个空地再推
如果当前点到达了边界则break。
真就直接暴力模拟
多个棋子可以一起推
程序
#include <bits/stdc++.h> using namespace std; char s[10001][10001];
char situtation[4] = {'^','v','<','>'};
int direction = 0 , x , y;
int direction_back[5] = {0 , 2 , 1 , 4 , 3};
int direction_right[5] = {0 , 4 , 3 , 1 , 2};
int direction_left[5] = {0 , 3 , 4 , 2 , 1}; void Go_Up(int k)
{
int x_next = x;
int y_next = y;
for(int i = x - 1; i >= 1; i--)
{
if(x_next == 1)
break;
if(!k)
break;
if(s[i][y] == '.')
{
x_next--;
k--;
continue;
}
if(s[i][y] != '.')
{
int flag = i;
for(int j = i; j >= 1; j--)
if(s[j][y] == '.' || j == 1)
{
flag = j;
break;
}
for(int j = flag; j <= i; j++)
s[j][y] =s [j + 1][y];
x_next--;
k--;
}
}
x = x_next;
}
void Go_Down(int k)
{
int x_next = x;
int y_next = y;
for(int i = x + 1; i <= 8; i++)
{
if(x_next == 8)
break;
if(!k)
break;
if(s[i][y] == '.')
{
x_next++;
k--;
continue;
}
if(s[i][y] != '.')
{
int flag = i;
for(int j = i; j <= 8; j++)
if(s[j][y] == '.' || j == 8)
{
flag = j;
break;
}
for(int j = flag; j >= i; j--)
s[j][y] = s[j - 1][y];
x_next++;
k--;
}
}
x = x_next;
}
void Go_Left(int k)
{
int y_next = y;
for(int i = y - 1; i >= 1; i--)
{
if(y_next == 1)
break;
if(k == 0)
break;
if(s[x][i] == '.')
{
y_next--;
k--;
continue;
}
if(s[x][i] != '.')
{
int flag = i;
for(int j = i; j >= 1; j--)
{
if(s[x][j] == '.'||j == 1)
{
flag = j;
break;
} }
for(int j = flag; j <= i; j++)
s[x][j] = s[x][j + 1];
y_next--;
k--;
}
}
y = y_next;
}
void Go_Right(int k)
{
int y_next = y;
for(int i = y + 1; i <= 8; i++)
{
if(y_next == 8)
break;
if(!k)
break;
if(s[x][i] == '.')
{
y_next++;
k--;
continue;
}
if(s[x][i] != '.')
{
int flag = i;
for(int j = i; j <= 8; j++)
{
if(s[x][j] == '.' || j == 8)
{
flag = j;
break;
} }
for(int j = flag; j >= i; j--)
s[x][j] = s[x][j - 1];
y_next++;
k--;
}
}
y = y_next;
}
int main()
{
ios::sync_with_stdio(false);
for(int i = 1; i <= 8; i++)
for(int j = 1; j <= 8; j++)
{
cin >> s[i][j];
if(s[i][j] == '^')
{
direction=1;
s[i][j] = '.';
x = i;
y = j;
}
if(s[i][j] == 'v')
{
direction = 2;
x = i;
y = j;
s[i][j] = '.';
}
if(s[i][j] == '<')
{
x = i;
y = j;
s[i][j] = '.';
direction = 3;
}
if(s[i][j] == '>')
{
x = i;
y = j;
s[i][j] = '.';
direction = 4;
}
}
string a,b;
int c;
int t = 0;
while(1)
{
cin >> a;
if(a == "#")
break;
else
if(a == "turn")
{
cin >> b;
if(b == "right")
direction = direction_right[direction];
else
if(b == "left")
direction = direction_left[direction];
else
if(b == "back")
direction = direction_back[direction];
}
else
if(a == "move")
{
cin >> c;
if(direction == 1)
Go_Up(c);
else
if(direction == 2)
Go_Down(c);
else
if(direction == 3)
Go_Left(c);
else
if(direction == 4)
Go_Right(c);
}
}
for(int i = 1; i <= 8; i++)
{
for(int j = 1; j <= 8; j++)
{
if(x == i && y == j)
cout << situtation[direction - 1];
else
cout << s[i][j];
}
cout << endl;
}
return 0;
}
P2033 Chessboard Dance的更多相关文章
- 洛谷 P2033 Chessboard Dance
P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...
- HDU 2414 Chessboard Dance (力模拟)
主题链接:HDU 2414 Chessboard Dance 意甲冠军:鉴于地图,>,<,^,v的方向,字母相当于是箱子,箱子能够推出边界.人保证不会做出边界.以下输入指令,依照指令走,输 ...
- POJ 3344 & HDU 2414 Chessboard Dance(模拟)
题目链接: PKU:http://poj.org/problem? id=3344 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2414 Descrip ...
- 【HDOJ】2414 Chessboard Dance
简单DFS. /* 2414 */ #include <cstdio> #include <cstring> #include <cstdlib> ; ][]; i ...
- HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)
题目 模拟题也各种wa,我最近真的堕落了,,,,,智商越来越为负数了!!!!!!!! #include<stdio.h> #include<string.h> #include ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...
- CodeForces445A DZY Loves Chessboard
A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...
随机推荐
- 『政善治』Postman工具 — 4、HTTP请求基础组成部分介绍
目录 1.Method 2.URL 3.Headers 4.body 一般来说,所有的HTTP Request都有最基础的4个部分组成:URL. Method. Headers和body. 1.Met ...
- 利用cm压缩包手动安装cm和cdh
安装准备: 1.操作系统为centos6.9 CentOS-6.9-x86_64-bin-DVD1to2 2.安装Oracle JDK (1.8u121) 下载jdk-8u121-linux-x64. ...
- 从0开始fastjson漏洞分析
关于fastjson漏洞利用参考:https://www.cnblogs.com/piaomiaohongchen/p/10799466.html fastjson这个漏洞出来了很久,一直没时间分析, ...
- 引言:CTF新世界
1. CTF的昨天和今天 CTF(Capture The Flag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式.CTF起源于1996年DEFCON全球黑客 ...
- 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业
初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...
- [敏杰开发]知识路书——图形化文献管理大师 Beta版发布喽!!!
[敏杰开发]知识路书--图形化文献管理大师 Beta版发布喽!!! 一.总览 项目名称:知识路书 发布形式:网页应用 发布地址:http://roadmap.imcoming.top 二.运行环境与使 ...
- str.isdigit()可以判断变量是否为数字
字符串.isdigit()可以判断变量是否为数字 是则输出True 不是则输出False 好像只能字符串
- [Linux] Linux C编程一站式学习 Part.1
C语言入门 程序基本概念 程序和编程语言 C语言--(编译器)--汇编语言--(汇编器)--机器语言(目标代码 / 可执行代码) 可移植 / 平台无关:平台指计算机体系结构或操作系统,或二者的组合.不 ...
- [前端] AJAX
背景 Asynchronous JavaScript And XML:异步js和XML,可实现异步刷新 用途 验证提交的用户名是否已存在 不使用AJAX,需要提交数据后,刷新页面来验证 使用AJAX, ...
- 在linux下把jsp文件 打包war格式(centos7)
在linux下把jsp文件 打成war包 chmod -R 777 /data/jdk8u242-b08/bincd /data/TongWeb61712/deployment/TestCase//d ...