TJU ACM-ICPC Online Judge—1191 The Worm Turns
B - The Worm Turns
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu
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的更多相关文章
- TOJ 1191. The Worm Turns
191. The Worm Turns Time Limit: 1.0 Seconds Memory Limit: 65536K Total Runs: 5465 Accepted Run ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- 【转】ACM/ICPC生涯总结暨退役宣言—alpc55
转自:http://hi.baidu.com/accplaystation/item/ca4c2ec565fa0b7fced4f811 ACM/ICPC生涯总结暨退役宣言—alpc55 前言 早就该写 ...
- 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 ...
- 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 ...
- 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 ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
- 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 ...
随机推荐
- JSON File Parse
1.write a json file base on website(在网站上写一个json文件) json文件网址:https://raw.githubusercontent.com/DJOSIM ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- PHP GZIP压缩+BASE64
<?php $str = ' {"pf":"AC25c","dt":"2017-02-04 09:49:49",& ...
- JDK 8 之 Stream sorted() 示例
原文链接:http://www.concretepage.com/java/jdk-8/java-8-stream-sorted-example 国外对Java8一系列总结的不错, 翻译过来给大家共享 ...
- [Swift]LeetCode56. 合并区间 | Merge Intervals
Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...
- [Swift]LeetCode560. 和为K的子数组 | Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarra ...
- [Swift]LeetCode959. 由斜杠划分区域 | Regions Cut By Slashes
In a N x N grid composed of 1 x 1 squares, each 1 x 1 square consists of a /, \, or blank space. Th ...
- python数组并集交集补集
并集 a = ["a", "b", "c", "d"] b = ["b", "e" ...
- mac缺少librt问题记录
在mac下编译一个程序的时候遇到错误 ld: library not found for -lrt librt.so主要是glibc对real-time部分的支持.所以一般含有#include< ...
- Spring boot 之自动生成API文档swagger2
目前解决API的方案一般有两种 1.编写文档接口.2.利用一些现成的api系统.3.如我一般想搞点特色的就自己写个api系统:http://api.zhaobaolin.vip/ ,这个还支持多用户. ...