`
249326109
  • 浏览: 56267 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

uva 101 - The Blocks Problem

    博客分类:
  • acm
 
阅读更多

 

题目不难,模拟类的问题,用C语言写的。

 

有些细节要注意,比如各种非法命令如何处理,题目中有明确说明:

Any command in which a = b or in which a and b are in the same stack of blocks is an illegal command. All illegal commands should be ignored and should have no affect on the configuration of blocks

 

还有貌似我用ANSI C提交不支持 // 注释,会导致编译错误。

 

#include<stdio.h>
#include<string.h>

#define MAX 30

struct Stack {
	int element[MAX];
	int size;
};

struct Pile {
	struct Stack stacks[MAX];
	int size;
};

typedef struct Index {
	int i;
	int j;
} Index;

struct Pile pile;

void printPile() {
	int i, j;
	for (i = 0; i < pile.size; i++) {
		printf("%d:", i);
		for (j = 0; j < pile.stacks[i].size; j++) {
			printf(" %d", pile.stacks[i].element[j]);

		}
		printf("\n");
	}

}

void getIndex(int BlockNum, Index* index) {
	int i, j;

	for (i = 0; i < pile.size; i++) {
		for (j = 0; j < pile.stacks[i].size; j++) {
			if (BlockNum == pile.stacks[i].element[j]) {
				index->i = i;
				index->j = j;
				break;
			}

		}
	}

}

void move(Index from, Index to) {
	pile.stacks[to.i].element[to.j] = pile.stacks[from.i].element[from.j];
	pile.stacks[to.i].size++;
	pile.stacks[from.i].size--;

}
/*
 * type is 0 when move/pile "onto" sth.
 * type is not 0 when move/pile "over" sth.
 * */
void moveNum(int fromInt, int toInt, int type) {
	Index from, to;

	getIndex(fromInt, &from);
	getIndex(toInt, &to);
	if (type == 0)
		to.j++;
	else
		to.j = pile.stacks[to.i].size;

	move(from, to);

}

void multiMove(Index from, Index to) {
	int i;
	int end = pile.stacks[from.i].size;
	for (i = from.j; i < end; i++) {
		Index tmpFrom = { from.i, i };
		Index tmpTo = { to.i, pile.stacks[to.i].size };
		move(tmpFrom, tmpTo);
	}

}

void multiMoveNum(int fromInt, int toInt) {

	Index from, to;
	getIndex(fromInt, &from);
	getIndex(toInt, &to);
	multiMove(from, to);

}

void returnBlocks(Index index) {
	int i, value;
	int size = pile.stacks[index.i].size;
	for (i = index.j + 1; i < size; i++) {
		value = pile.stacks[index.i].element[i];
		Index from = { index.i, i };
		Index to = { value, pile.stacks[value].size };
		move(from, to);
	}

}

void returnNum(int blockNum) {
	Index index;
	getIndex(blockNum, &index);
	returnBlocks(index);

}

int main() {
	int n;
	int i;

	while (scanf("%d", &n) != EOF) {
		pile.size = n;
		for (i = 0; i < pile.size; i++) {
			pile.stacks[i].element[0] = i;
			pile.stacks[i].size = 1;
		}

		char cmd1[10],cmd2[10];
		int fromInt,toInt;
		while(1) {
			scanf("%s",cmd1);
			if(strcmp(cmd1,"quit")==0) {
				printPile();
				break;
			}
			scanf("%d%s%d",&fromInt,cmd2,&toInt);

			if(fromInt==toInt)
			continue;

			Index from,to;
			getIndex(fromInt,&from);
			getIndex(toInt,&to);

			if(from.i==to.i)
			continue;

			if(strcmp(cmd1,"move")==0) {
				if(strcmp(cmd2,"onto")==0) {
					returnNum(fromInt);
					returnNum(toInt);
					moveNum(fromInt, toInt,0);
				}
				else {
					returnNum(fromInt);
					moveNum(fromInt, toInt,1);

				}

			}
			else {
				if(strcmp(cmd2,"onto")==0) {
					returnNum(toInt);
					multiMoveNum(fromInt,toInt);
				}
				else {
					multiMoveNum(fromInt,toInt);
				}

			}

		}

	}

	return 0;
}

 

分享到:
评论

相关推荐

    scratch-blocks-develop.zip

    `scratch-blocks-develop.zip`是一个压缩包,包含了已经编译过的`scratch-blocks`源代码。源码通常指的是编程语言的原始文本文件,包含可读的指令,供开发者理解和修改。这个压缩包中的源码已经过编译,意味着它已经...

    Built-In Building Blocks.dotx

    Built-In Building Blocks.dotx office2016 .

    Templates for the Solution of Linear Systems - Building Blocks for Iterative Methods.ps

    Templates for the Solution of Linear Systems - Building Blocks for Iterative Methods.ps

    POJ1390--blocks.rar

    标题“POJ1390--blocks.rar”指的是一个压缩包文件,用于提交给编程竞赛平台POJ(Programming Online Judge)的解决方案。POJ是一个在线的编程竞赛平台,程序员可以在这里提交自己的源代码来解决特定的算法问题。在...

    huacai-Building Blocks.rar

    "huacai-Building Blocks.rar" 文件就是为了解决这类问题而提供的一个解决方案。 Building Blocks是Word的一项功能,它允许用户创建、存储和重复使用各种文本元素,如页眉、页脚、目录、页码等。这些预定义的元素...

    SBNet- Sparse Blocks Network for Fast Inference.zip

    本文件“SBNet- Sparse Blocks Network for Fast Inference.zip”包含了一份详细的技术报告——“SBNet- Sparse Blocks Network for Fast Inference.pdf”,将深入探讨这一创新技术。 SBNet的核心思想是引入“稀疏...

    gulp-remove-debug-blocks-源码.rar

    《深入解析gulp-remove-debug-blocks源码》 在前端开发过程中,为了调试代码,我们常常会在JavaScript文件中插入一些debug语句,如console.log()、debugger等。然而,在生产环境中,这些语句往往是不必要的,因为...

    PyPI 官网下载 | eks-spot-blocks-0.2.97.tar.gz

    《PyPI与eks-spot-blocks-0.2.97:Python在云原生环境中的分布式解决方案》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python程序员提供了海量的第三方模块和库,使得开发变得更加便捷...

    Unity游戏源码分享-有意思的科普游戏3D-Electronic-Blocks-master

    本资源"3D-Electronic-Blocks-master"是一个基于Unity的3D科普游戏源码,旨在通过有趣的电子积木游戏,向玩家传播电子科学知识。 游戏的核心概念是通过模拟电子元件(如电阻、电容、二极管、三极管等)的连接,让...

    scratch-blocks源码编译1

    ### Scratch-Blocks源码编译指南 #### 一、前言 本文将详细介绍如何从源码编译Scratch-Blocks的过程。Scratch-Blocks是一款基于Google的Blockly项目的可视化编程库,用于构建像Scratch这样的图形化编程环境。通过...

    Python库 | django-textblocks-0.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:django-textblocks-0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Laravel开发-voyager-page-blocks

    【Laravel开发-voyager-page-blocks】是一个专为 Laravel 的 Voyager 管理面板设计的扩展包,它旨在帮助开发者更加灵活地构建和管理页面内容。Voyager 是一个非常受欢迎的 Laravel 后台管理界面,提供了丰富的功能,...

    Android代码-Stack Blocks

    【Stack Blocks】是一款基于Unity 3D开发的手机游戏,灵感来源于流行的游戏“Stack”。这款游戏主要测试玩家的手眼协调能力和反应速度,通过堆叠不同形状的方块来尽可能地达到更高的分数。Unity 3D是一个强大的跨...

    Python库 | eks-spot-blocks-0.2.105.tar.gz

    《Python库eks-spot-blocks-0.2.105详解》 eks-spot-blocks-0.2.105.tar.gz是一个针对Python开发的库,主要服务于后端开发领域。这个库的名称暗示了它可能与Amazon Elastic Kubernetes Service (EKS) 和Spot ...

    AI-Blocks-master_opengl_python_ThingThing_AI-Blocks_

    标题 "AI-Blocks-master_opengl_python_ThingThing_AI-Blocks_" 暗示这是一个与人工智能相关的项目,可能是一个使用Python编程语言实现的图形用户界面(GUI)应用,它利用了OpenGL进行图形渲染,并且可能与一个名为...

    MPLAB-Device-Blocks-for-Simulink-master_matlab_源码

    在MATLAB的广阔世界中,MPLAB-Device-Blocks-for-Simulink-master是针对Microchip微控制器的一种强大工具集,专为Simulink环境设计。这款开源项目为工程师们提供了在Simulink中直接模拟和设计Microchip器件的能力,...

    Python库 | format-blocks-0.1.2.tar.gz

    "format-blocks-0.1.2.tar.gz" 是一个与Python相关的压缩包,其中包含了一个名为 "format-blocks" 的库的0.1.2版本。这个库可能专注于文本格式化或处理代码块的特定任务。 首先,让我们了解一下`.tar.gz`文件。这是...

    Python库 | eks-spot-blocks-0.2.249.tar.gz

    《Python库eks-spot-blocks-0.2.249详解》 eks-spot-blocks-0.2.249.tar.gz是一个针对Python开发者的库,它为Amazon Elastic Kubernetes Service (EKS) 提供了对Spot实例的支持。在深入探讨这个库之前,先了解一下...

    PyPI 官网下载 | eks-spot-blocks-0.2.36.tar.gz

    综上所述,eks-spot-blocks-0.2.36.tar.gz是一个针对AWS EKS服务中Spot Instances管理的Python库,它提供了与AWS服务交互的接口,帮助开发者更有效地利用成本效益高的Spot Instances资源。通过Python的打包和分发...

Global site tag (gtag.js) - Google Analytics