题目描述

在棋盘上跳舞是件有意思的事情。现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向。求按一定操作后,棋盘的状态。

操作有四种,描述如下:

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的更多相关文章

  1. 洛谷 P2033 Chessboard Dance

    P2033 Chessboard Dance 题目描述 在棋盘上跳舞是件有意思的事情.现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向.求按一定操作后,棋盘的状态. 操作有四种,描述如下 ...

  2. HDU 2414 Chessboard Dance (力模拟)

    主题链接:HDU 2414 Chessboard Dance 意甲冠军:鉴于地图,>,<,^,v的方向,字母相当于是箱子,箱子能够推出边界.人保证不会做出边界.以下输入指令,依照指令走,输 ...

  3. POJ 3344 &amp; HDU 2414 Chessboard Dance(模拟)

    题目链接: PKU:http://poj.org/problem? id=3344 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2414 Descrip ...

  4. 【HDOJ】2414 Chessboard Dance

    简单DFS. /* 2414 */ #include <cstdio> #include <cstring> #include <cstdlib> ; ][]; i ...

  5. HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)

    题目 模拟题也各种wa,我最近真的堕落了,,,,,智商越来越为负数了!!!!!!!! #include<stdio.h> #include<string.h> #include ...

  6. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  7. BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流

    1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...

  8. LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)

    题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...

  9. CodeForces445A DZY Loves Chessboard

    A. DZY Loves Chessboard time limit per test 1 second memory limit per test 256 megabytes input stand ...

随机推荐

  1. Tomcat管理弱口令页面Getshell

    目录 弱口令Getshell 利用Burpsuite对tomcat账号密码进行爆破 弱口令Getshell Tomcat安装完成后会有如下页面,点击该页面的 Manager App 处会弹出输入用户名 ...

  2. Linux-鸟菜-1-Linux简介

    Linux-鸟菜-1-Linux简介 鸟哥这一章是介绍了Linux的由来以及建议怎么学Linux.很多也是建议性的东西,概念性的东西(当然我不是排斥概念).把最后鸟哥的汇总粘过来吧. 建议大家去看下这 ...

  3. 【JavaScript】Leetcode每日一题-递增顺序搜索树

    [JavaScript]Leetcode每日一题-递增顺序搜索树 [题目描述] 给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没 ...

  4. svn客户端访问失败,错误“请求的名称有效,但是找不到请求的类型”的解决

    1.问题描述:visualSVN客户端在其他机子访问出现以下问题(服务端装在我的电脑上,我本机客户端可以正常访问) 2. 原因分析:SVN客户端访问服务器需要输入URL地址,URL地址分为两种方式.一 ...

  5. CDH安装步骤

    Six Steps to CDH Installation There are many options and potential paths that make each CDH cluster ...

  6. L SERVER 数据库被标记为“可疑”的解决办法

    问题背景: 日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无故停 ...

  7. DWVA--File Inclusion

    文件包含漏洞 先来了解一下什么是文件包含 因为程序开放人员通常会把可重复使用的函数写到单个文件中,在需要使用到这些函数时候,就可以 直接调用这个文件,这种对文件的调用过程就被称为文件包含. 文件包含漏 ...

  8. 05.24 ICPC 2019-2020 North-Western Russia Regional Contest复现赛+Codeforces Round #645 (Div. 2)

    A.Accurate Movement(复现赛) 题意:两个木块最左边都在0的位置,最右边分别为a,b(b>a),并且短的木条只能在长木条内移动,问两个木条需要移动多少次才能使两个木条的右端都在 ...

  9. Spring Boot 允许跨域设置失败的问题深究

    在公司开发过程中,一个前后端分离的项目遇见了跨域的问题. 前端控制台报错:No 'Access-Control-Allow-Origin' header is present on the reque ...

  10. [刷题] 209 Minimum Size Subarray Sum

    要求 给定一个含有 n 个正整数的数组和一个正整数 s 找出该数组中满足其和 ≥ s 的长度最小的连续子数组 如果不存在符合条件的连续子数组,返回 0 示例 输入:s = 7, nums = [2,3 ...