`

joj 1034: Worm Turns

    博客分类:
  • ACM
阅读更多
http://acm.jlu.edu.cn/joj/showproblem.php?pid=1034
这道题类似于贪吃蛇游戏,让你模拟Worm移动,看第几步跑出board,第几步跑到自己身上,全部完成。所以算法就是模拟。
#include<iostream>
#include<list>
#include<string>
using namespace std;

struct Square{
	int x;
	int y;
};

const int ROWS = 51;
const int COLS = 51;

list<Square> worm;

void init_worm(){
	worm.clear();
	int i = 25;
	int j = 11;
	for(; j <= 30; j++){
		Square s;
		s.x = i;
		s.y = j;
		worm.push_front(s);
	}
}

bool in_bound(int i,int j){
	return i >= 1 && i < ROWS-1 && j >= 1 && j <= COLS-1;
}

bool run_into_self(int x, int y){
	list<Square>::iterator it = worm.begin();
	list<Square>::reverse_iterator rit = worm.rbegin();
	
	if(rit->x == x && rit->y == y)//deal with the tail specially
		return false;

	for(; it != worm.end(); it++){
		if(it->x == x && it->y == y){
			return true;
		}
	}
	return false;
}

bool move(int i,int j,int current_step){
	Square head = worm.front();
	int x = head.x + i;
	int y = head.y + j;

	if( !in_bound(x,y) ){
		cout << "The worm ran off the board on move " << current_step << "." << endl;
		return false;
	}else if( run_into_self(x,y) ){
		cout << "The worm ran into itself on move " << current_step << "." << endl;
		return false;
	}else{
		head.x = x;
		head.y = y;
		worm.push_front(head);
		worm.pop_back();
		return true;
	}
}


int main(){
 	int move_steps;
	while(cin >> move_steps,move_steps){
 		init_worm();
 		int i; 
 		bool flag;
		string moves;
		cin >> moves;
 		for(i = 1; i <= move_steps; i++){
   			flag = true;
   			char ch = moves[i-1];
   			switch(ch){
	   			 case 'E':
	 				if(!move(0,1,i))
						flag = false;			
	 				break;
	 			case 'W':
	 				if(!move(0,-1,i))
						flag = false;	
	   				break;
				case 'N':
	 				if(!move(-1,0,i))
						flag = false;
	 				break;
				 case 'S':
	 				if(!move(1,0,i))
						flag = false;
	 				break;
				 defalut:
				   break;					
			}
   			
			if(!flag)
	  			 break;
			
 		}
		if(i == move_steps + 1)
	 		cout << "The worm successfully made all " << move_steps << " moves." << endl;
	}
 	return 0;
}
2
0
分享到:
评论

相关推荐

    joj上做的一些ACM试题

    【标题】:“JOJ上做的一些ACM试题” 在计算机科学领域,ACM(Association for Computing Machinery)国际大学生程序设计竞赛是一项备受瞩目的比赛,旨在提升大学生的算法设计、问题解决以及团队协作能力。JOJ...

    joj 部分题目答案 自己做的 仅供参考

    joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考 joj 部分题目答案 自己做的 仅供参考

    acm.rar_acm jlu 10_acm jlu 1029_joj 1237_joj10

    "joj_1237"和"joj10"可能分别对应JOJ平台上的两个具体题目编号,1237号问题和编号为10的一组题目。这些标签有助于分类和检索这些源代码,便于查找特定题目或比赛的解决方案。 在压缩包内的文件名列表中,只有一个...

    joj acm 部分习题解答

    【标题】"joj acm 部分习题解答"揭示了这是一份与JOJ(Judge Online Job)和ACM(国际大学生程序设计竞赛)相关的资源,主要是作者对于某些题目的解题思路和代码实现。JOJ是用于在线评测编程竞赛题目的一种平台,而...

    JOJ-jilin-university--acm.rar_joj

    【标题】"JOJ-jilin-university--acm.rar_joj" 提供的是吉林大学JOJ在线判题系统的编程竞赛代码集,主要用于帮助初学者入门。 【描述】中的信息表明,这个压缩包内的代码样例是专门为在JOJ平台上进行编程训练的学生...

    joj.rar_joj

    操作系统中的页面置换算法是内存管理的重要组成部分,尤其是在虚拟内存系统中。先进先出(First In First Out,简称FIFO)页面置换算法是一种简单的页面置换策略,它的基本思想是:当需要淘汰一个页面时,选择最早...

    Joj - Java Version of Java-开源

    Java 开源项目 Joj 是一个致力于为 Java 源代码提供对象化表示的库,它类似于 JDOM 在处理 XML 文档中的角色。Joj 的设计目标是为开发者提供一种更直观、更方便的方式来操作和解析 Java 代码,使得在处理大量 Java ...

    JoJ-crx插件

    Etre au courant quand JoJ est en live,策划人semaine et liens vers lesréséauxauxsocioaux Soyez au courant纠结JoJ开始à流光! 现场直播将继续进行。 约翰·奎因·伊斯特·布鲁和克林·德集团的非官方网站 D...

    吉林大学ACM题集.pdf-JOJ

    #### 标题:吉林大学ACM题集.pdf—JOJ 此文档标题明确指出了文档的主要内容——一个由吉林大学组织编写的ACM竞赛题集,并且该题集是以PDF格式提供的。这里提到的“JOJ”即吉林大学在线裁判系统(Jilin University On...

    吉林大学 joj 1000-2645题代码

    吉林大学 joj 1000-2645题代码,嘿嘿,大家就不用在花JPOINT买代码了,祝ACMer实现自己的心愿

    joj 1424 硬币兑换问题

    JOJ 1424题目,即硬币兑换问题,要求参与者通过编程实现一种算法,它能够找到使用最少数量硬币凑成特定金额的方法。动态规划作为一种有效的算法策略,被广泛应用于此类问题的解决之中。 动态规划,简称为DP,是解决...

    acm joj 1600

    根据给定的信息,本文将详细解释“acm joj 1600”中的两种大数取模运算方法。此问题主要关注如何高效地计算形如 \(a^b \mod m\) 的表达式,这对于处理大数据或进行密码学运算非常重要。 ### 大数取模运算 #### ...

    一个有关调度的问题joj1015

    这个题其实现在想起来也不知道是怎么就给ac的。

    安全文明施工管理目标【精选文档】.doc

    4. **现场管理目标**:根据JOJ59—59安全检查标准和重庆市建筑工地文明施工标准,对施工现场进行规范化管理,争取成为重庆市的安全文明施工示范工地。 5. **安全管理目标**: - **安全教育目标**:建立安全生产...

    JoJo-s-Bizarre-Survival:一个模组,将JoJo的奇异冒险中的看台添加到Minecraft

    该mod基于荒木飞吕彦的JoJo的奇妙冒险漫画和动漫系列。 这个mod也受到KnightDemon的1.12 mod 极大启发。 这个mod的目的是要从专营权中尽可能多地增加Minecraft,该mod目前仅包含Stand能力,其他能力(Hamon,...

    ControlEstoque_GH:..

    Este Projeto签证是由estoque进行的,它是由mer mercadorias uma determinada empresa sejam averiguadas和atualizadas ... 2021年1月20日,由JoséCláudiodeAraújoJúnior和Annielly Ferreira de Sousa所设计。

    furystudios

    furystudios 普尔维·扎达塔克(Prvi zadatak) ...DroppingOff - radnikhodajućidolazi做pripadajuće科萨雷(izvedeno kroz provjeru tagova kutije)我卡达joj JE dovoljno blizu,fizičkiJE lan

    大智慧最新安装

    大智慧最新安装包,老的已经过期不能查询个人自选股,所以推荐最新的大智慧给大家安装

Global site tag (gtag.js) - Google Analytics