主题链接:HDU 2414 Chessboard Dance

意甲冠军:鉴于地图,>,<,^,v的方向,字母相当于是箱子,箱子能够推出边界。人保证不会做出边界。以下输入指令,依照指令走,输出结束时图的状态。

强行模拟一遍,注意以下给出的案例。

>t.p.p.p
...a....
........
...bfg.y
...c...
...d....
...e....
........
move 3
turn right
move 3
turn left
move 3
turn left
move 3
#

AC代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=20;
char mp[maxn][maxn];
queue<char> q;
int get_dir(int x,int y)
{
if(mp[x][y]=='^')
return 1;
else if(mp[x][y]=='>')
return 2;
else if(mp[x][y]=='v')
return 3;
else if(mp[x][y]=='<')
return 4;
} void out()
{
int i,j;
//printf("---------------------\n");
for(i=0; i<8; i++)
{
for(j=0; j<8; j++)
printf("%c",mp[i][j]);
printf("\n");
}
printf("\n");
} int main()
{
int i,j;
int dir,x,y;
char scr[20];
while(scanf("%s",mp[0])!=EOF)
{
if(strcmp(mp[0],"--")==0)
break;
while(!q.empty())
q.pop();
for(i=1; i<8; i++)
scanf("%s",mp[i]);
for(i=0; i<8; i++)
{
for(j=0; j<8; j++)
{
if(mp[i][j]=='>' || mp[i][j]=='^' || mp[i][j]=='<' || mp[i][j]=='v')
{
x=i;
y=j;
dir=get_dir(x,y);
break;
}
}
}
//out();
while(1)
{
scanf("%s",scr);
if(strcmp(scr,"#")==0)
break;
while(!q.empty())
q.pop();
if(strcmp(scr,"move")==0)
{
int ss;
scanf("%d",&ss);
if(dir==1)//向上
{
int temp;
if(ss>=x)//!走出边界
{
temp=x;
for(i=x;i>=0;i--)
mp[i][y]='.';
mp[x=0][y]='^';
}
else
{
mp[x][y]='.';
int temp=x-1;
int cont=ss;
while(cont--)
{
while(mp[temp][y]!='.' && temp>=0)
{
q.push(mp[temp][y]);
mp[temp][y]='.';
temp--;
}
temp--;
}
temp=x-ss;
mp[x=temp--][y]='^';
for(;temp>=0 && !q.empty();temp--)
{
mp[temp][y]=q.front();
q.pop();
}
}
//out();
}
else if(dir==2)//向右
{
int temp;
if(ss>=7-y)//!走出边界
{
temp=7-y;
for(i=y;i<8;i++)
mp[x][i]='.';
mp[x][y=7]='>';
}
else
{
mp[x][y]='.';
int temp=y+1;
int cont=ss;
while(cont--)
{
while(mp[x][temp]!='.' && temp<8)
{
q.push(mp[x][temp]);
mp[x][temp]='.';
temp++;
}
temp++;
}
temp=y+ss;
mp[x][y=temp++]='>';
for(;temp<8 && !q.empty();temp++)
{
mp[x][temp]=q.front();
q.pop();
}
}
//out();
}
else if(dir==3)//向下
{
int temp;
if(ss>=7-x)//!走出边界
{
temp=7-x;
for(i=x;i<8;i++)
mp[i][y]='.';
mp[x=7][y]='v';
}
else
{
mp[x][y]='.';
int temp=x+1;
int cont=ss;
while(cont--)
{
while(mp[temp][y]!='.' && temp<8)
{
q.push(mp[temp][y]);
mp[temp][y]='.';
temp++;
}
temp++;
}
temp=x+ss;
mp[x=temp++][y]='v';
for(;temp<8 && !q.empty();temp++)
{
mp[temp][y]=q.front();
q.pop();
}
}
//out();
}
else if(dir==4)//向左
{
int temp;
if(ss>=y)//!走出边界
{
temp=y;
for(i=y;i>=0;i--)
mp[x][i]='.';
mp[x][y=0]='<';
}
else
{
mp[x][y]='.';
int temp=y-1;
int cont=ss;
while(cont--)
{
while(mp[x][temp]!='.' && temp>=0)
{
q.push(mp[x][temp]);
mp[x][temp]='.';
temp--;
}
temp--;
}
temp=y-ss;
mp[x][y=temp--]='<';
for(;temp>=0 && !q.empty();temp--)
{
mp[x][temp]=q.front();
q.pop();
}
}
//out();
}
}
else if(strcmp(scr,"turn")==0)
{
char cc[20];
scanf("%s",cc);
if(strcmp(cc,"left")==0)
{
if(dir==1) dir=4,mp[x][y]='<';
else if(dir==2) dir=1,mp[x][y]='^';
else if(dir==3) dir=2,mp[x][y]='>';
else if(dir==4) dir=3,mp[x][y]='v';
}
else if(strcmp(cc,"right")==0)
{
if(dir==1) dir=2,mp[x][y]='>';
else if(dir==2) dir=3,mp[x][y]='v';
else if(dir==3) dir=4,mp[x][y]='<';
else if(dir==4) dir=1,mp[x][y]='^';
}
else if(strcmp(cc,"back")==0)
{
if(dir==1) dir=3,mp[x][y]='v';
else if(dir==2) dir=4,mp[x][y]='<';
else if(dir==3) dir=1,mp[x][y]='^';
else if(dir==4) dir=2,mp[x][y]='>';
}
//out();
}
}
out();
}
return 0;
}
/*
.....c..
.p..A..t
D..>T.Pr
....aP.P
p.d.C...
.....p.R
........
........
move 5 .....c..
.p..A..t
D..>T.Pr
....aP.P
p.d.C...
.....p.R
........
........
move 1
turn left
move 99
turn back
move 6
#
.....c..
.p.....t
D....TPr
.....P.P
p.d.C...
.....p.R
....v...
....a... >t.p.p.p
...a....
........
...bfg.y
...c...
...d....
...e....
........
move 3
turn right
move 3
turn left
move 3
turn left
move 3
# .>ta.cb.
........
........
........
........
........
........
........
move 3
#
*/

版权声明:本文博主原创文章,博客,未经同意不得转载。

HDU 2414 Chessboard Dance (力模拟)的更多相关文章

  1. 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 ...

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

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

  3. 【HDOJ】2414 Chessboard Dance

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

  4. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  5. 洛谷 P2033 Chessboard Dance

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

  6. UVALive 4222 /HDU 2961 Dance 大模拟

    Dance Problem Description For a dance to be proper in the Altered Culture of Machinema, it must abid ...

  7. HDU 5948 Thickest Burger 【模拟】 (2016ACM/ICPC亚洲区沈阳站)

    Thickest Burger Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  8. HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))

    Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  9. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

随机推荐

  1. python几道简单的算法题

    最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...

  2. Web Worker在WebKit中的实现机制

    web worker 是执行在后台的 JavaScript,独立于其它脚本.不会影响页面的性能.这是HTML5的一个标准:实现上讲.浏览器为wokrer启动了新的线程,从而实现了异步操作的功能; 以下 ...

  3. jQuery中间each实施例的方法

    $.each()和$(selector).each()很阶段似,但它是不一样的. 前者可用于遍历数组或json对象 后者被设计成遍历jQuery对象 第一个是$.each()对,通常这么用 $.eac ...

  4. HDU1028Ignatius and the Princess III母函数入门

    这个题也能够用递归加记忆化搜索来A,只是因为这题比較简单,所以用来做母函数的入门题比較合适 以展开后的x4为例,其系数为4,即4拆分成1.2.3之和的拆分数为4: 即 :4=1+1+1+1=1+1+2 ...

  5. hdu 1420(Prepared for New Acmer)(中国剩余定理)(降幂法)

    Prepared for New Acmer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  6. eclipse 代码清理 代码格式化 代码凝视

    Code Style包含两个方面:代码清理,代码规范化.代码清理能够參考: http://www.ibm.com/developerworks/cn/opensource/os-eclipse-cle ...

  7. [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10161   Accepted: 2810 D ...

  8. 【iOS】彩虹渐变色 的 Swift 实现

    首先很感谢大家的支持与关注.<Web Color 的 Swfit 实现>一文一经公布.訪问量迅速攀升,让本人受宠若惊. 为表达感激之情,今天早上把彩虹渐变也顺手实现了. 最新代码& ...

  9. C++程序代写实现HashSet class

    C++程序代写实现HashSet class 专业程序代写(QQ:928900200) Implement a HashSet class for elements of type string.It ...

  10. Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口

    于Linux Kernel(Android) 加密算法总结(cipher.compress.digest)文章中.介绍了怎样在内核中增加三种不同类型的内核加密算法, 并给出了在内核模块中怎样调用他们的 ...