POJ 1879 Tempus et mobilius Time and motion 队列和栈

时间:2022-09-18 19:21:57

很简单的队列和栈的应用,不过读明白题意非常重要:(直接引用白书的题解)三个轨道,一个库。分别是分钟单位的轨道,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 队列和栈的更多相关文章

  1. POj 1879 Tempus et mobilius Time and motion &lpar;模拟&plus;群&rpar;

    题目特别长,大意为球的传递. 三个轨道,一个库.各自是分钟单位的轨道.5min单位的轨道.一小时单位的轨道.还有就是n容量的库. 每过一分钟,一个小球从库里面出来,库符合先进先出,进入分钟轨道.假设分 ...

  2. UVA 239 - Tempus et mobilius&period; Time and motion&lpar;更换周期&rpar;

    UVA 239 - Tempus et mobilius. Time and motion 题目链接 题意:这题题意也是吊得飞起,看了老半天,大概是这样: 有一个放球的队列.和3个轨道(说白了就是栈) ...

  3. poj 1879 Truck History

    本题链接:点击打开链接 题目大意: 输入n表示卡车辆数,输入每辆卡车编号.即长度为7的字符串,每辆卡车编号均可由其他类型编号衍生过来,求由当中一辆衍生出其他全部的最小衍生次数(有一个字符不同就需衍生一 ...

  4. POJ 1879

    栈和队列的综合应用,利用栈和队列分别模拟分,5分,时槽,以及小球队列 利用求出一天后的置换可以求出周期,进而求出最大公约数(可以利用矩阵的角度,也许可以简化,因为每次都是乘上一个相同的置换矩阵) 要注 ...

  5. POJ 3013 Big Christmas Tree&lpar;最短Dijkstra&plus;优先级队列优化,SPFA&rpar;

    POJ 3013 Big Christmas Tree(最短路Dijkstra+优先队列优化,SPFA) ACM 题目地址:POJ 3013 题意:  圣诞树是由n个节点和e个边构成的,点编号1-n. ...

  6. POJ 3162 Walking Race(树形dp&plus;单调队列 or 线段树)

    http://poj.org/problem?id=3162 题意:一棵n个节点的树.有一个屌丝爱跑步,跑n天,第i天从第i个节点开始跑步,每次跑到距第i个节点最远的那个节点(产生了n个距离),现在要 ...

  7. &lbrack;POJ 2559&rsqb;Largest Rectangle in a Histogram 题解(单调栈)

    [POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...

  8. 【POJ】2373 Dividing the Path(单调队列优化dp)

    题目 传送门:QWQ 分析 听说是水题,但还是没想出来. $ dp[i] $为$ [1,i] $的需要的喷头数量. 那么$ dp[i]=min(dp[j])+1 $其中$ j<i $ 这是个$ ...

  9. POJ 3494 Largest Submatrix of All 1’s 单调队列&vert;&vert;单调栈

    POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrice ...

随机推荐

  1. Eclipse 搭建 Maven Web项目

    第一步:安装JDK: 第二步:安装Eclipse: 第三步:安装tomcat7: 第四步:安装maven插件: 4.1 下载maven:http://maven.apache.org/download ...

  2. UI:UITableView 编辑、cell重用机制

    tableView编辑.tableView移动.UITableViewController tableView的编辑:cell的添加.删除. 使⽤场景: 删除⼀个下载好的视频,删除联系⼈: 插⼊⼀条新 ...

  3. STL序列式容器

    1.vector      空间运用的灵活性.      实现技术——关键是对大小的控制以及重新配置时的数据移动效率.      配置新空间.数据移动.释还旧空间      erase(int pos ...

  4. 师兄写的一个JAVA播放器的源代码(转)

    师兄写的一个JAVA播放器的源代码 MediaPlayer.java------------------------------------------------------------------ ...

  5. tp5 点击刷新验证码

    <form action="<{:url('index/index/login')}>" method="post" name="f ...

  6. 树莓派小车(三)Python控制小车

    正文之前 由于最近忙于复习赶考,所以暂时没有拿起树莓派小车,直到昨天,终于空出时间来把代码整理一下来和大家分享. 正文 在树莓派小车系列之二中,讲到了树莓派的引脚定义方式有两种: PHYSICAL N ...

  7. AtCoder Grand Contest 027 &lpar;AGC017&rpar; D - Modulo Matrix 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC027C.html 题解 首先我们假装 max mod min = 1 然后对着这个构造. 将各自黑白染色, ...

  8. bug制造者又上线了

    上一家公司,领导经常这样表扬一位同事,“你写的bug远比你的功能值钱...” 今天特么的突然觉得我好像也有这样的功能,不知道是上次回家把脑子落家里了还是,前几天淋雨脑子进了水了. 呢么简单一个功能,愣 ...

  9. 【Spring】11、Spring事务管理

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  10. &lbrack;daily&rsqb;&lbrack;editer&rsqb; 二进制编辑工具 hyx

    用了众多之后,终于发现了一个好用的二进制编辑工具: hyx https://yx7.cc/code/ https://en.wikipedia.org/wiki/Comparison_of_hex_e ...