题目描述

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

操作有四种,描述如下:

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. 利用 Windows 线程池定制的 4 种方式完成任务(Windows 核心编程)

    Windows 线程池 说起底层的线程操作一般都不会陌生,Windows 提供了 CreateThread 函数来创建线程,为了同步线程的操作,Windows 提供了事件内核对象.互斥量内核对象.关键 ...

  2. AZscaaner源码解读之数据库连接(一)

    准备开个新坑,但是可能近期不会更新,先写一篇开个头. sqlalchemy 目前在Python中使用得比较多的是sqlalchemy,sqlalchemy是一个对象关系映射(ORM).sqlalche ...

  3. FFmpeg应用实践之命令查询

    0. 前言 FFmpeg 中常用的工具有三个,分别是多媒体编解码工具ffmpeg.多媒体内容分析工具ffprobe和多媒体播放器ffplay.本文介绍的指令都是与编解码工具 ffmpeg 相关的. 学 ...

  4. OO第三单元总结——JML规格

    一.JML简介 1.JML语言的理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言 (Behavior In ...

  5. 面向对象JML系列作业总结

    面向对象JML系列作业总结 一.综述 本单元作业,由简到难地迭代式实现了三种JML需求,主要学习了面向规格的编程方法. 第一次:实现Path类和PathContainer类 第二次:继承PathCon ...

  6. mysql unique key

    create table b1(id int,name char unique)这样name字段就唯一了 或者create table b1(id int,name char,unique(id),u ...

  7. 《前端运维》一、Linux基础--03Shell基础及补充

    诶诶欸?不是学Linux么?怎么要讲shell了?shell是啥?啥是shell? 别急,我们先简单了解下shell是什么.Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁. ...

  8. Java Arrays.sort()重写comparator方法

    先看一下接口 Arrays.sort(T[],Comparator<? super T> c); comparator要重写compare方法 compare方法大概长这样,返回值> ...

  9. mysql知识点归纳-锁(死锁)

    愿历尽千帆,归来仍是少年 所遇问题: MySql 更新死锁问题 Deadlock found when trying to get lock; try restarting transaction 场 ...

  10. [bug] springboot 静态资源 layui.css 404

    目录结构 引用路径 <link rel="stylesheet" href="../static/layui/css/layui.css" type=&q ...