2017-08-28 15:07:16

writer:pprp

好开心,这道题本来在集训的时候做了很长很长时间,但是还是没有做出来,但是这次的话,只花了两个小时就做出来了

好开心,这次采用的是仔细分析需要的函数,写一个函数就将这个函数进行测试,所以效率比较高

这次竟然提交了一次直接AC了,hhhh


我想总结一下这种做题感觉,一直认为自己实现功能的能力比较弱,虽然这是事实,但是没有想象中那么弱,其实还是可以实现很大一部分的内容

之后只要方法对了,然后可以坚持下去,那我就很大几率成功,昨天看视频的时候看到一个很厉害的人他说他身边有的高中同学在大学期间,只用了一年

时间,就将全国金牌拿到手了,并且那个人并不是很聪明,但是他十分努力。所以说我还是有希望的,经过长时间的训练和锻炼是可以达到很高的提升的;

以后做题还是要坚持1、计时  2、审题认真仔细,找到容易忽略的地方,以及特殊情况  3、模块化编程,边编边测试


代码以及详细讲解如下:

/*
@theme:poj 1208
@writer:pprp
@start:11:00-12:00
@end:14:41-13:06
@declare:写一个恶心的模拟题目,
经过抽象,得到两个操作,模拟样例的操作的时候,
可以看出几个特殊情况,如果将a和a上的箱子一起放到b箱上,那么如果b就是a上的箱子,那么不进行操作
注意这个是面向箱子的不是面向位置的
而且发现有两个函数需要构造出来
1、查找函数Find,找到某个箱子的位置,横纵坐标
2、进行输出操作Out,这个还有利于检查
@date:2017/8/28
*/ #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
#define tag cout << " *** " << endl using namespace std;
int n; deque<int> dq[];
bool Find(deque<int> dq[], int key,int&x, int&y); //操作1:将某箱子上边所有的箱子放回原位
//@param:x, x是箱子x
//test successfully
void resend(int a)
{
int x, y;
Find(dq,a,x,y);
for(int i = (int)dq[x].size()- ; i > y ; i--)
{
int tmp = dq[x].back();
dq[tmp].push_back(tmp);
dq[x].pop_back();
}
return;
} //操作2:将某个箱子和箱子以上的箱子都移动到指定箱子的最上方--ok?
//a到b的上方
void transe(int a, int b)
{
int ax, ay, bx, by;
Find(dq,a,ax, ay);
Find(dq,b,bx, by);
//如果将a和a上的箱子一起放到b箱上,那么如果b就是a上的箱子,那么不进行操作
if(ax == bx)
return; int ak[];
int len = dq[ax].size() - ay ;
for(int i = ; i < len ; i++)
{
ak[i] = dq[ax].back();
dq[ax].pop_back();
} for(int i = len - ; i >= ; i--)
{
dq[bx].push_back(ak[i]);
}
return;
} //操作3:输出操作 -- ok
void Out()
{
for(int i = ; i < n ; i++)
{
cout << i << ": " ;
for(int j = ; j < (int)dq[i].size(); j++)
{
cout << dq[i][j] << " ";
}
cout << endl;
}
} //操作4:查找操作 -- ok
bool Find(deque<int> dq[], int key,int&x, int&y)
{
for(int i = ; i < n ; i++)
{
for(int j = ; j < (int)dq[i].size(); j++)
{
if(key == dq[i][j])
{
x = i;
y = j;
return true;
}
}
}
return false;
}
//操作5:初始化 -- ok
void init()
{
for(int i = ; i < n ; i++)
{
dq[i].push_back(i);
}
return ;
} int main()
{
cin >> n;
init(); // Out();
// dq[8].pop_back();
// dq[1].push_back(8);
// dq[7].pop_back();
// dq[1].push_back(7);
// dq[3].pop_back();
// dq[4].push_back(3);
// dq[5].pop_back();
// dq[4].push_back(5);
// Out(); char line[];
char ch1[],ch2[];
int a = , b = ; // while(cin >> a >> b)
// {
// transe(a,b);
// Out();
// }
while(gets(line))
{
if(strcmp(line,"quit") == )
break;
sscanf(line,"%s %d %s %d",ch1,&a,ch2,&b);
if(strcmp(ch1,"move") == )
{
if(strcmp(ch2,"over") == )//move a over b
{
resend(a);
transe(a,b);
}
else //move a onto b
{
resend(a);
resend(b);
transe(a,b);
}
}
else
{
if(strcmp(ch2,"over") == ) //pile a over b
{
transe(a,b);
}
else //pile a onto b
{
resend(b);
transe(a,b);
}
}
}
Out();
return ;
}

POJ 1208 模拟的更多相关文章

  1. uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟

    挺水的模拟题,刚开始题目看错了,poj竟然过了...无奈.uva果断wa了 搞清题目意思后改了一下,过了uva. 题目要求模拟木块移动: 有n(0<n<25)快block,有5种操作: m ...

  2. POJ 1016 模拟字符串

    Numbers That Count Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20396   Accepted: 68 ...

  3. POJ 1208 The Blocks Problem --vector

    http://poj.org/problem?id=1208 晚点仔细看 https://blog.csdn.net/yxz8102/article/details/53098575 #include ...

  4. POJ 1208 The Blocks Problem

    The Blocks Problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5397   Accepted: 231 ...

  5. POJ - 3087 模拟 [kuangbin带你飞]专题一

    模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...

  6. Shuffle'm Up POJ - 3087(模拟)

    Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15249   Accepted: 6962 Des ...

  7. poj 1379 模拟退火法

    /* 模拟退火法: 找到一些随机点,从这些点出发,随机的方向坐标向外搜索: 最后找到这些随机点的最大值: 坑://if(xx>-eps&&xx<x+eps&& ...

  8. POJ 1471 模拟?

    题意:求最大无坏点三角形 思路: 模拟? (为什么我模拟过了...) 有人用 DP,有人用 搜索... // by SiriusRen #include <cstdio> #include ...

  9. POJ 1951 模拟

    思路: 坑爹模拟毁我一生 给两组数据: 输入: YOURE TRAVELING THROUGH ANOTHER DIMENSION A DIMENSION NOT OF SIGHT. 输出: YR T ...

随机推荐

  1. java中 synchronized 的使用,确保异步执行某一段代码。

    最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一 ...

  2. Python并行编程(三):线程同步之Lock

    1.基础概念 当两个或以上对共享内存操作的并发线程中,如果有一个改变数据,又没有同步机制的条件下,就会产生竞争条件,可能会导致执行无效代码.bug等异常行为. 竞争条件最简单的解决方法是使用锁.锁的操 ...

  3. 【Django错误】OSError: raw write() returned invalid length 14 (should have been between 0 and 7)

    错误环境 使用Django框架创建完models类的之后,用python manage.py migrate命令来生成数据库表的时候出错 错误代码 Operations to perform: App ...

  4. dijstra算法,求源点到各个顶点的最短距离

    1:dijstra算法常用语求最短距离, dijstra每次从未发现节点n[]中,发现距离源点最短的节点m,求出最短节点后,将m添加到已发现节点y[]中,用该节点m进行更新其它未发现节点n[]-m的最 ...

  5. livego

    1.安装golang开发环境 https://www.cnblogs.com/eczhou/p/7929693.html 2.livego源码及说明文档 https://github.com/zhou ...

  6. Spring第七弹—依赖注入之注解方式注入及编码解析@Resource原理

        注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员无法预见最终的装配结果. 手工装配依赖对象  手工装配依赖对象,在这种方式中又有两种编 ...

  7. Git的安装和设置

    1.客户端下载 首先可以在https://git-scm.com/downloads下载客户端,进行安装. 2.安装 安装比较简单,可以直接默认一步一步往下安装即可: 3.配置github的ssh秘钥 ...

  8. python 之操作redis数据库(非关系型数据库,k-v)

    数据库: 1. 关系型数据库 表结构 2. 非关系型数据库 nosql (k - v 速度快),常用的时以下三种: memcache 存在内存里 redis 存在内存里 mangodb 数据还是存在磁 ...

  9. CDOJ 1287 MC挖矿世界(Spfa+set优化)

    题目大意:原题链接 解题思路:此题要求多点最短距离,但是直接套用floyd会超时. 然后我们想直接从每一个点开始bfs就好了,但是还是会TLE,为什么呢? 因为你访问了很多次没有意义的地方,因为有些点 ...

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

    Time Limit:3000MS     Memory Limit:0KB Description Background Many areas of Computer Science use sim ...