题目不难,模拟类的问题,用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`源代码。源码通常指的是编程语言的原始文本文件,包含可读的指令,供开发者理解和修改。这个压缩包中的源码已经过编译,意味着它已经...
Built-In Building Blocks.dotx office2016 .
Templates for the Solution of Linear Systems - Building Blocks for Iterative Methods.ps
标题“POJ1390--blocks.rar”指的是一个压缩包文件,用于提交给编程竞赛平台POJ(Programming Online Judge)的解决方案。POJ是一个在线的编程竞赛平台,程序员可以在这里提交自己的源代码来解决特定的算法问题。在...
"huacai-Building Blocks.rar" 文件就是为了解决这类问题而提供的一个解决方案。 Building Blocks是Word的一项功能,它允许用户创建、存储和重复使用各种文本元素,如页眉、页脚、目录、页码等。这些预定义的元素...
本文件“SBNet- Sparse Blocks Network for Fast Inference.zip”包含了一份详细的技术报告——“SBNet- Sparse Blocks Network for Fast Inference.pdf”,将深入探讨这一创新技术。 SBNet的核心思想是引入“稀疏...
《深入解析gulp-remove-debug-blocks源码》 在前端开发过程中,为了调试代码,我们常常会在JavaScript文件中插入一些debug语句,如console.log()、debugger等。然而,在生产环境中,这些语句往往是不必要的,因为...
《PyPI与eks-spot-blocks-0.2.97:Python在云原生环境中的分布式解决方案》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python程序员提供了海量的第三方模块和库,使得开发变得更加便捷...
本资源"3D-Electronic-Blocks-master"是一个基于Unity的3D科普游戏源码,旨在通过有趣的电子积木游戏,向玩家传播电子科学知识。 游戏的核心概念是通过模拟电子元件(如电阻、电容、二极管、三极管等)的连接,让...
### Scratch-Blocks源码编译指南 #### 一、前言 本文将详细介绍如何从源码编译Scratch-Blocks的过程。Scratch-Blocks是一款基于Google的Blockly项目的可视化编程库,用于构建像Scratch这样的图形化编程环境。通过...
资源分类:Python库 所属语言:Python 资源全名:django-textblocks-0.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
【Laravel开发-voyager-page-blocks】是一个专为 Laravel 的 Voyager 管理面板设计的扩展包,它旨在帮助开发者更加灵活地构建和管理页面内容。Voyager 是一个非常受欢迎的 Laravel 后台管理界面,提供了丰富的功能,...
【Stack Blocks】是一款基于Unity 3D开发的手机游戏,灵感来源于流行的游戏“Stack”。这款游戏主要测试玩家的手眼协调能力和反应速度,通过堆叠不同形状的方块来尽可能地达到更高的分数。Unity 3D是一个强大的跨...
《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_" 暗示这是一个与人工智能相关的项目,可能是一个使用Python编程语言实现的图形用户界面(GUI)应用,它利用了OpenGL进行图形渲染,并且可能与一个名为...
在MATLAB的广阔世界中,MPLAB-Device-Blocks-for-Simulink-master是针对Microchip微控制器的一种强大工具集,专为Simulink环境设计。这款开源项目为工程师们提供了在Simulink中直接模拟和设计Microchip器件的能力,...
"format-blocks-0.1.2.tar.gz" 是一个与Python相关的压缩包,其中包含了一个名为 "format-blocks" 的库的0.1.2版本。这个库可能专注于文本格式化或处理代码块的特定任务。 首先,让我们了解一下`.tar.gz`文件。这是...
《Python库eks-spot-blocks-0.2.249详解》 eks-spot-blocks-0.2.249.tar.gz是一个针对Python开发者的库,它为Amazon Elastic Kubernetes Service (EKS) 提供了对Spot实例的支持。在深入探讨这个库之前,先了解一下...
综上所述,eks-spot-blocks-0.2.36.tar.gz是一个针对AWS EKS服务中Spot Instances管理的Python库,它提供了与AWS服务交互的接口,帮助开发者更有效地利用成本效益高的Spot Instances资源。通过Python的打包和分发...