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 ...
随机推荐
- 分子动力学模拟软件VMD的安装与使用
技术背景 在分子动力学模拟过程中会遇到一些拓扑结构非常复杂的分子模型,所谓的复杂不仅仅是包含众多的原子,还有各种原子之间的成键关系与成键类型等.这时候就非常能够体现一个好的可视化软件的重要性了,这里我 ...
- 本地jar包安装Maven本地仓库
下载jar包 如果本地存在,可以忽略. 本地安装命令 mvn install:install-file -Dfile=D:\Environment\Java\JDK\lib\tools.jar -Dg ...
- PhpStorm个性化设置推荐
预览 字体 字体使用jetbrains的mono,前往下载:如何安装,字体安装完成之后Restart,可在PhpStorm settings中搜索 font 进行启用 mono 字体 主题 主题推荐使 ...
- ppt技巧一四步法调整段落排版
声明:本文所有截图来源于网易云课堂--<和秋叶一起学PPT>,仅作为个人复习之用,特此声明!
- 跟我一起学Go系列:gRPC 入门必备
RPC 的定义这里就不再说,看文章的同学都是成熟的开发.gRPC 是 Google 开源的高性能跨语言的 RPC 方案,该框架的作者 Louis Ryan 阐述了设计这款框架的动机,有兴趣的同学可以看 ...
- Java 进行时间处理
Java 进行时间处理 一.Calendar (1).Calender介绍 Calendar的中文翻译是日历,实际上,在历史上有着许多种计时的方法.所以为了计时的统一,必需指定一个日历的选择.那现在最 ...
- opencv——轮廓发现与轮廓(二值图像)分析
引言 二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息. 这里顺带提下边缘检测,和轮廓提取的区别: 边缘检测 ...
- java的"\\s+"什么意思?
例如:String[] tt=addr.split("\\s+");\\s ==\s 表示转义字符 ,\s表示匹配任意空格(包括空格,制表符,换页符)\\s+中的'+'表示多次匹配
- [设计模式] 设计模式课程(十二)-- 门面模式(Facade)
概述 也称外观模式 按目的属于结构型模式,按封装属于接口隔离模式 在组件构建过程中,某些接口之间的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口 ...
- [刷题] PTA 02-线性结构4 Pop Sequence
模拟栈进出 方法一: 1 #include<stdio.h> 2 #define MAXSIZE 1000 3 4 typedef struct{ 5 int data[MAXSIZE]; ...