B - The Worm Turns

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu

Submit Status

Description

Worm is an old computer game. There are many versions, but all involve maneuvering a "worm" around the screen, trying to avoid running the worm into itself or an obstacle.

We'll simulate a very simplified version here. The game will be played on a 50 x 50 board, numbered so that the square at the upper left is numbered (1, 1). The worm is initially a string of 20 connected squares. Connected squares are adjacent horizontally or vertically. The worm starts stretched out horizontally in positions (25, 11) through (25, 30), with the head of the worm at (25, 30). The worm can move either East (E), West (W), North (N) or South (S), but will never move back on itself. So, in the initial position, a W move is not possible. Thus the only two squares occupied by the worm that change in any move are its head and tail. Note that the head of the worm can move to the square just vacated by the worm's tail.

You will be given a series of moves and will simulate the moves until either the worm runs into itself, the worm runs off the board, or the worm successfully negotiates its list of moves. In the first two cases you should ignore the remaining moves in the list.

Input

There will be multiple problems instances. The input for each problem instance will be on two lines. The first line is an integer n (<100) indicating the number of moves to follow. (A value of n = 0 indicates end of input.) The next line contains n characters (either E, W, N or S), with no spaces separating the letters, indicating the sequence of moves.

Output

Generate one line of output for each problem instance. The output line should be one of the follow three:

The worm ran into itself on move m.

The worm ran off the board on move m.

The worm successfully made all m moves.

Where m is for you to determine and the first move is move 1.

Sample Input

18

NWWWWWWWWWWSESSSWS

20

SSSWWNENNNNNWWWWSSSS

30

EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

13

SWWWWWWWWWNEE

0

Sample Output

The worm successfully made all 18 moves.

The worm ran into itself on move 9.

The worm ran off the board on move 21.

The worm successfully made all 13 moves.

这个题目的话,相信大部分同学都能一眼看出其意思,即使是一个英文题,哈哈,这不就是我们玩的贪吃蛇游戏,判断死亡的一个方法吗,题目不是很难,话不多说看代码先:

AC代码如下:(如有错误和建议,请大家不吝指出)

#include<stdio.h>
#include<string.h>
int main() {
int n,hgs[55][55],wx,wy,tx,ty;
int flag1,flag2;
char str[105];
while(scanf("%d",&n),n) {
getchar();
scanf("%s",str);
memset(hgs,0,sizeof(hgs));//每次游戏开始重置归零
for(int i=11; i<=30; i++) hgs[25][i]=1;
tx=25; ty=30;
wx=25; wy=11;
flag1=flag2=0;
int k=0;
int count=0;
for(int i=0;; i++) {
if(str[i]==' ') continue; //还是判断一下有没有空格的好,被坑怕了,小心一点为好
//先处理尾部的运动
if(count+1<20) {
hgs[wx][wy]=0; wy++;
} else {
hgs[wx][wy]=0;
while(str[k]==' ') k++;
if(str[k]=='E') wy++;
else if(str[k]=='S') wx--;
else if(str[k]=='W') wy--;
else if(str[k]=='N') wx++;
k++;
} //后处理头部的运动
if(str[i]=='E') { //向右走
ty++;
if(ty>50) {
flag1=1; break;
}
if(hgs[tx][ty]==0) hgs[tx][ty]=1;
else {
flag2=1; break; //头撞到了自己
}
} else if(str[i]=='S') { //向下走
tx--;
if(tx<1) {
flag1=1; break;
}
if(hgs[tx][ty]==0) hgs[tx][ty]=1;
else {
flag2=1; break;
}
} else if(str[i]=='W') { //向左走
ty--;
if(ty<1) {
flag1=1; break;
}
if(hgs[tx][ty]==0) hgs[tx][ty]=1;
else {
flag2=1; break;
}
} else if(str[i]=='N') { //向上走
tx++;
if(tx>50) {
flag1=1; break;
}
if(hgs[tx][ty]==0) hgs[tx][ty]=1;
else {
flag2=1; break;
}
}
count++;
if(count==n) break;
}
if(count==n) printf("The worm successfully made all %d moves.\n",count);
else if(flag1) printf("The worm ran off the board on move %d.\n",count+1);
else if(flag2) printf("The worm ran into itself on move %d.\n",count+1);
}
return 0;
}

TJU ACM-ICPC Online Judge—1191 The Worm Turns的更多相关文章

  1. TOJ 1191. The Worm Turns

    191.   The Worm Turns Time Limit: 1.0 Seconds   Memory Limit: 65536K Total Runs: 5465   Accepted Run ...

  2. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  3. 【转】ACM/ICPC生涯总结暨退役宣言—alpc55

    转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...

  4. 2016 ACM/ICPC Asia Regional Dalian Online 1006 /HDU 5873

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

  5. HDU 5874 Friends and Enemies 【构造】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Friends and Enemies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

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

  7. 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛

    比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...

  8. ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))

    祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...

  9. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

随机推荐

  1. git常用方法整理

    Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). Git有什么特点?简单来说就是:高端大气上档次! 初始化本地仓库 mkdir xxx cd xxx git init 创建本 ...

  2. Windows 查询端口占用

    1.找到端口的进程ID(PID)(例如:8080) Windows系统: netstat -ao | find " Windows以外的其他平台: lsof -i: 2.杀死你找到的进程ID ...

  3. Reactjs项目性能优化

    在construct中绑定函数this shouldComponentUpdate React.PureComponent 无状态组件 chrome浏览器性能优化工具 setTimeout,setIn ...

  4. ubuntu amd64 的锐捷连接解决办法---武汉大学

    昨日博主闲来弄了个ubuntu玩玩,于是上网成了个问题,博主武大信息学部,锐捷上校园网.装的是13.04的amd64. 凑巧在珞珈山水bbs上看到我在解决上网出现问题出现的相同情况,但是没有人回答,于 ...

  5. [python] python django web 开发 —— 15分钟送到会用(只能送你到这了)

    1.安装python环境 1.1 安装python包管理器: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py   1. ...

  6. 【安富莱】【RL-TCPnet网络教程】第8章 RL-TCPnet网络协议栈移植(RTX)

    第8章        RL-TCPnet网络协议栈移植(RTX) 本章教程为大家讲解RL-TCPnet网络协议栈的RTX操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要 ...

  7. [Swift]LeetCode719. 找出第 k 小的距离对 | Find K-th Smallest Pair Distance

    Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...

  8. Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)

    上一节我们有了两个分片的pxc集群,这一节我们接着安装haproxy和keepalived的实现集群的高可用 一.先下载haproxy的镜像 [root@localhost ~]# docker pu ...

  9. Python __new__ 实现单例模式 python经典面试题

    话不多说,上代码 class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance' ...

  10. remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.

    如果cmake提示下列错误:......CMake Error at cmake/readline.cmake:85 (MESSAGE):  Curses library not found.  Pl ...