Winter-2-STL-D The Blocks Problem 解题报告及测试数据

题解:
1、这道题总共有四种堆积木的方法,(1)是move onto 就是将a,b上面的积木恢复到原来的位置。将a堆在b上。(2)是move over 就是将a上面的积木恢复到原来的位置,将a堆在b所在的那一摞积木的最上面。(3)是pile onto 就是将b上面的积木恢复到原来的位置,将a及其上面的积木堆在b上。(4)pile over 就是将a及其上面的积木堆在b所在那一摞积木的最上面。
2、其实如果a,b上面都没有积木,那么pile onto、pile over 其实是和move onto、move over没有区别的,a,b上有积木,区别就在于是否需要将a或b上的积木恢复。所以可以拆分为小函数。(1)是函数restore(int c),将c上的积木恢复。(2)是函数pile(int a,int b)将a及其以上积木,堆在含有b那一摞积木的最上面。
3、那么四种方法可以简化为三步 ,(1)如果是move,那么就restore(a);(2)如果是onto 就restore(b);(3)最后pile(a,b)即可。
4、执行操作过程中,如果a==b 或者a和b在同一摞,则为无效指令,跳过即可,判断在islegal()中。
5、特别需要注意的是输出格式,最后一行的回车不可少,每一行每一个数字前面有一个空格,最后一个数字之后没有空格,不然算法是对了,但是PE就太忧伤了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int A[30][30],x,y,z,w;
char s1[10],s2[10];
int a,b,op,n;
void Find(int c,int &u,int &v){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(A[i][j]==c){ u=i;v=j;}
}
bool islegal(){
if(a==b)return 0;
Find(a,x,y);
Find(b,z,w);
if(x==z)return 0;
return 1;
}
void restore(int p){
Find(p,x,y);
while(A[x][++y]!=-1){
int t= A[x][y];
A[t][0]=t;
A[x][y]=-1;
}
}
void pile(int a,int b){
Find(a,x,y);
Find(b,z,w);
while(A[z][++w]!=-1);w--;
while(A[x][y]!=-1){
A[z][++w]=A[x][y];
A[x][y++]=-1;
}
}
int main(){
//freopen("1.in","r",stdin);
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)A[i][j]=-1;
A[i][0]=i;
}
while(scanf("%s",s1)!=EOF && s1[0]!='q'){
scanf("%d%s%d",&a,s2,&b);
if(islegal()==0)continue;
if(s1[0]=='m')restore(a);
if(s2[1]=='n')restore(b);
pile(a,b);
}
for(int i=0;i<n;i++){
printf("%d:",i);
int k=0;
while(A[i][k]!=-1)
printf(" %d",A[i][k++]);
printf("\n");
}
}
以下是测试数据:
sample input
10
move 6 on 5
move 4 over 8
pile 9 on 0
move 3 on 9
pile 1 on 9
move 1 over 0
pile 7 over 6
move 1 on 8
pile 5 on 3
move 2 on 5
quit
7
move 6 over 5
pile 3 on 0
pile 5 on 1
move 2 on 0
pile 0 on 1
move 0 over 2
move 1 over 1
move 5 over 3
pile 6 over 5
pile 3 over 1
quit
sample output
0: 0 9
1:
2:
3: 3 5 2
4: 4
5:
6: 6
7: 7
8: 8 1
9:
0:
1: 1 0 2 3 5 6
2:
3:
4: 4
5:
6:
Winter-2-STL-D The Blocks Problem 解题报告及测试数据的更多相关文章
- codeforces B. Routine Problem 解题报告
题目链接:http://codeforces.com/problemset/problem/337/B 看到这个题目,觉得特别有意思,因为有熟悉的图片(看过的一部电影).接着让我很意外的是,在纸上比划 ...
- HDU p1294 Rooted Trees Problem 解题报告
http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- [poj 2480] Longge's problem 解题报告 (欧拉函数)
题目链接:http://poj.org/problem?id=2480 题目大意: 题解: 我一直很欣赏数学题完美的复杂度 #include<cstring> #include<al ...
- UVa第五章STL应用 习题((解题报告))具体!
例题5--9 数据库 Database UVa 1592 #include<iostream> #include<stdio.h> #include<string.h&g ...
- 【LeetCode】365. Water and Jug Problem 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学题 相似题目 参考资料 日期 题目地址:http ...
- UOJ182 a^-1 + b problem 解题报告
题目描述 有一个长度为\(n(n\le 10^5)\)的数列,在模\(M\)意义下进行\(m(m \le50000)\)次操作,每次操作形如以下两种形式: 1 \(x\) 表示每个数加\(x(0 \l ...
- codeforces 798C.Mike and gcd problem 解题报告
题目意思:给出一个n个数的序列:a1,a2,...,an (n的范围[2,100000],ax的范围[1,1e9] ) 现在需要对序列a进行若干变换,来构造一个beautiful的序列: b1,b2, ...
- sgu 104 Little shop of flowers 解题报告及测试数据
104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...
随机推荐
- [openwrt]网络配置
Network: config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr ...
- VS2013和VS2010工具集和字符集
不兼容要改工具集 有时也要改字符集 位置:项目->项目属性->配置属性.常规 或者先选中项目,再同上. vs平台工具集 vs2010版本之后支持使用之前的版本编译,可以在 属性-> ...
- CSS代码重构与优化
CSS代码重构的基本方法 前面说到了CSS代码重构的目的,现在我们来说说一些如何达到这些目的的一些基本方法,这些方法都是易于理解,容易实施的一些手段,大家平时可能也不知不觉地在使用它. 提高CSS性能 ...
- PHP正则表达式 /i, /s, /x,/u, /U, /A, /D, /S等模式修饰符
i (PCRE_CASELESS) 如果设置了这个修饰符, 模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下, PCRE认为目标字符串是由单行字符组成的(然而实际 ...
- 关于python类型创建、反射(自醒)与反序列化
一.反序列化漏洞与新式类 在pickle和cPickle以及shelve这三个序列化类中,想要构造反序列化漏洞执行命令或者代码,都需要用到新式类. shelve其实底层就是调用的pickle和cPic ...
- LeetCode 笔记系列16.2 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]
题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...
- centos7 安装kafka Manager
1.安装sbt编译环境 curl https://bintray.com/sbt/rpm/rpm |tee /etc/yum.repos.d/bintray-sbt-rpm.repo yum inst ...
- 初级Java面试题 – SSM框架篇
加入我的QQ群(701974765) 获取更多好用又好玩的软件,还有不定期发放的福利呦(- ̄▽ ̄)- Spring的优点/对Spring的理解 Spring的AOP编程 Spring的IOC Spri ...
- 170427、centos6.5配置duboo
IP: 192.168.0.111 部署容器:apache-tomcat-7.0.57 端口:8080 1. 下载最新版的 Tomcat7: $wget http://mirrors.hust.edu ...
- Number Sequence---hdu1711(kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题意就是求b数组在a数组出现的位置:就是kmp模板: #include<stdio.h&g ...