POJ 1879 Tempus et mobilius Time and motion 队列和栈
很简单的队列和栈的应用,不过读明白题意非常重要:(直接引用白书的题解)三个轨道,一个库。分别是分钟单位的轨道,5min单位的轨道,一小时单位的轨道,还有就是n容量的库。每过一分钟,一个小球从库里面出来,库符合先进先出,进入分钟轨道,如果分钟轨道里面已经有了4个,那么这四个就滑入库,而这个球则进入5min轨道,如果5min轨道已经有了11个,这11个就滑入库,而这个球则滑入小时轨道,如果小时轨道已经有了11个,则这11个滑入库,这个球最后滑入库。在轨道中的球滑入库中,轨道里的球满足先进后出。如此,轨道是栈,库是队列。而且模拟过程也出来了。暴力会爆。
把小球分开模拟,先求出每个小球回到原来位置上的周期,然后求所有小球周期的最小公倍数。小球编号:1..n;然后模拟小球24小时的情况,得到一天后库里的队列:p1,p2..pn;这样实际上是建立了一种置换:F(1..n)=(p1,p2..pn);对于当前处于x位置的小球,一天后,都处于px,这样,可以求出每个小球回到原位置的周期,再求所有的周期的最小公倍数即可。
可以学到几个基础的东西:
一个序列经过变换,最终到达某个状态,如果要找到某个值经过了多少次变换到达的,这个程序中有。
求最大公约数的方法,那个gcd函数(有很多种,详见百度百科)
求最小公倍数的方法,lcm函数
#include<cstdio>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
int gcd(int a,int b){
while(b^=a^=b^=a%=b);
return a;
}
inline int lcm(int a,int b){
return a*b/gcd(a,b);
}
int n;
int main(){
while(scanf("%d",&n)&&n){
stack <int> mins,fivmin,hours;
queue <int> all_ball;
;i<=n;i++)all_ball.push(i);
*;
int m;
while(cir--){
m=all_ball.front();
all_ball.pop();
){
;i<;all_ball.push(mins.top()),mins.pop(),i++);
){
;i<;all_ball.push(fivmin.top()),fivmin.pop(),i++);
){
;i<;all_ball.push(hours.top()),hours.pop(),i++);
all_ball.push(m);
}else hours.push(m);
}else fivmin.push(m);
}else mins.push(m);
}
];
; i <= n; i++) {
arr[i] = all_ball.front();
all_ball.pop();
}
];
; i <= n; i++)
brr[i] = ;
; i <= n; i++) {
int aa = arr[i];
while (aa != i) {
brr[i]++;
aa = arr[aa];
}
}
;
; i <= n; i++) {
sum = lcm(sum, brr[i]);
}
printf("%d balls cycle after %d days.\n",n,sum);
}
;
}
POJ 1879 Tempus et mobilius Time and motion 队列和栈的更多相关文章
- POj 1879 Tempus et mobilius Time and motion (模拟+群)
题目特别长,大意为球的传递. 三个轨道,一个库.各自是分钟单位的轨道.5min单位的轨道.一小时单位的轨道.还有就是n容量的库. 每过一分钟,一个小球从库里面出来,库符合先进先出,进入分钟轨道.假设分 ...
- UVA 239 - Tempus et mobilius. Time and motion(更换周期)
UVA 239 - Tempus et mobilius. Time and motion 题目链接 题意:这题题意也是吊得飞起,看了老半天,大概是这样: 有一个放球的队列.和3个轨道(说白了就是栈) ...
- poj 1879 Truck History
本题链接:点击打开链接 题目大意: 输入n表示卡车辆数,输入每辆卡车编号.即长度为7的字符串,每辆卡车编号均可由其他类型编号衍生过来,求由当中一辆衍生出其他全部的最小衍生次数(有一个字符不同就需衍生一 ...
- POJ 1879
栈和队列的综合应用,利用栈和队列分别模拟分,5分,时槽,以及小球队列 利用求出一天后的置换可以求出周期,进而求出最大公约数(可以利用矩阵的角度,也许可以简化,因为每次都是乘上一个相同的置换矩阵) 要注 ...
- POJ 3013 Big Christmas Tree(最短Dijkstra+优先级队列优化,SPFA)
POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意: 圣诞树是由n个节点和e个边构成的,点编号1-n. ...
- POJ 3162 Walking Race(树形dp+单调队列 or 线段树)
http://poj.org/problem?id=3162 题意:一棵n个节点的树.有一个屌丝爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要 ...
- [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)
[POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...
- 【POJ】2373 Dividing the Path(单调队列优化dp)
题目 传送门:QWQ 分析 听说是水题,但还是没想出来. $ dp[i] $为$ [1,i] $的需要的喷头数量. 那么$ dp[i]=min(dp[j])+1 $其中$ j<i $ 这是个$ ...
- POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈
POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrice ...
随机推荐
- C#调用WinAPI及窗口过程
C#调用WINAPI及Windows窗口消息的发与送 最近在做一个餐饮项目(C#Winform),其中有一块是做点菜宝接口的对接,点菜宝的厂商提供了一个WX.exe的驱动程序,这个驱动程序无直接打开, ...
- CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)
Class-based actorsA class-based actor is a subtype of event_based_actor and must implement the pure ...
- 我对c++对象内存布局的理解
引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基类 1: #include < ...
- L007-oldboy-mysql-dba-lesson07
L007-oldboy-mysql-dba-lesson07 [root@web01 ~]# mysqldump -uroot -ptestpassword -A >/root/mysql_ba ...
- Unity学习笔记(2):注册映射
在上一篇文章中(认识Unity)中概要介绍了Unity和Ioc,本节主要介绍IoC中的注册映射,并使用代码和配置文件两种方式进行说明. 定义依赖注入相关信息 定义ILogger接口 public in ...
- Kakfa揭秘 Day9 KafkaReceiver源码解析
Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...
- Linux分类笔记(一)-权限管理
Linux分类笔记(一) 权限管理 普通权限 文件的普通权限 对一个普通的文件使用ls -ll命令后,看到下面的输出内容 而对于文件权限中的每一位,又分别代表了以下的意思 文件类型又有以下几类: ...
- C++ 关联容器详解——从内部结构到应用
关联容器不同于顺序容器的是:顺序容器底层用数组实现,为线性结构:关联容器在实现中,用到的非线性存储方式: 顺序容器是通过元素在容器中的位置顺序存储和访问元素,而关联容器是通过键(key)存储和读取元素 ...
- Python通过Manager方式实现多个无关联进程共享数据
Python官方文档 Python实现多进程间通信的方式有很多种,例如队列,管道等. 但是这些方式只适用于多个进程都是源于同一个父进程的情况. 如果多个进程不是源于同一个父进程,只能用共享内存,信号量 ...
- javascript event兼容IE和FF
事件对象在IE和FF下的兼容写法 function abc(event){ var e=event||window.event; //键盘码的捕获 var key=e.which||e.keyCode ...