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. typeScript 学习

    最近看了下typescript, 虽然说已经有很多人已经用到它了,但是我还是写写自己的feel咯:这里推荐学习链接 https://ts.xcatliu.com. 这个入门学习,我不好做评价,但是我自 ...

  2. c#基础小练习

    1.通过控制台接受输入的数字,将数字放到一维数组中,进行反转数据处理,然后将反转的数据打印到控制台应用程序里 方法一 步骤: 1.添加接收控制台输入的数据变量 2.将接收的字符串转换成一维数组 3.新 ...

  3. JAVA小白开发环境配置(编译器为Idea)

    JDK配置 1.首先到官网下载最新版JDK:Oracle官网下载 Accept License Agreement–>下载适合自己pc版本的jdk(此处以64位windows为例.x86是32位 ...

  4. 最小化JIT示例(仅限Intel x86+Windows)

    #include <Windows.h> #include <cstdint> #include <cstring> #define BACK_FILL (0) i ...

  5. [Swift]LeetCode399. 除法求值 | Evaluate Division

    Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...

  6. [Swift]LeetCode930. 和相同的二元子数组 | Binary Subarrays With Sum

    In an array A of 0s and 1s, how many non-empty subarrays have sum S? Example 1: Input: A = [1,0,1,0, ...

  7. [Swift]LeetCode944. 删除列以使之有序 | Delete Columns to Make Sorted

    We are given an array A of N lowercase letter strings, all of the same length. Now, we may choose an ...

  8. 浏览器与服务端请求响应流程与HTTP协议

    浏览器与服务端请求响应流程图: 1.HTTP概要 1.1. 定义 HTTP(HyperText Transfer  Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种 ...

  9. RSA算法原理——(3)RSA加解密过程及公式论证

    上期(RSA简介及基础数论知识)为大家介绍了:互质.欧拉函数.欧拉定理.模反元素 这四个数论的知识点,而这四个知识点是理解RSA加密算法的基石,忘了的同学可以快速的回顾一遍. 一.目前常见加密算法简介 ...

  10. JVM系列第12讲:JVM参数之查看JVM参数

    今天要说的是如何查看 JVM 中已经设置的参数,包括显示参数和隐式参数. 打印显式参数 -XX:+PrintVMOptions 该参数表示程序运行时,打印虚拟机接受到的命令行显式参数.我们用下面的命令 ...