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 ...
随机推荐
- vue变异方法
push() 往数组最后面添加一个元素,成功返回当前数组的长度 pop() 删除数组的最后一个元素,成功返回删除元素的值 shift() 删除数组的第一个元素,成功返回删除元素的值u ...
- 一致性Hash算法在数据库分表中的实践
最近有一个项目,其中某个功能单表数据在可预估的未来达到了亿级,初步估算在90亿左右.与同事详细讨论后,决定采用一致性Hash算法来完成数据库的自动扩容和数据迁移.整个程序细节由我同事完成,我只是将其理 ...
- mac本webstrom破解
之前忙着加班一直没搞,有时间解决一下 首先编辑hosts文件 https://jingyan.baidu.com/article/f3ad7d0f55154309c3345bdd.html Mac系统 ...
- Java中的队列同步器AQS
一.AQS概念 1.队列同步器是用来构建锁或者其他同步组件的基础框架,使用一个int型变量代表同步状态,通过内置的队列来完成线程的排队工作. 2.下面是JDK8文档中对于AQS的部分介绍 public ...
- Python爬虫4-URLError与HTTPError
GitHub代码练习地址:URLError:https://github.com/Neo-ML/PythonPractice/blob/master/SpiderPrac06_URLError.py ...
- [Swift]LeetCode438. 找到字符串中所有字母异位词 | Find All Anagrams in a String
Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ...
- Linux清空文件内容
日志文件太多,需要清空: echo "" > mylog.log
- Agens层次聚类
层次聚类是另一种主要的聚类方法,它具有一些十分必要的特性使得它成为广泛应用的聚类方法.它生成一系列嵌套的聚类树来完成聚类.单点聚类处在树的最底层,在树的顶层有一个根节点聚类.根节点聚类覆盖了全部的所有 ...
- BBS论坛(十一)
11.1.前台用户模型创建 (1)apps/front/models.py 首先安装:pip install shortuuid class FrontUser(db.Model): __tablen ...
- AspNetCore taghelpers标签的使用
下面介绍几种常用的Tag标签 asp-for 类似于name asp-validation-for 类似于mvc下的验证,将的验证来源于model的验证特性 asp-validation-summar ...