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

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

  2. UVA 239 - Tempus et mobilius. Time and motion(更换周期)

    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(最短Dijkstra+优先级队列优化,SPFA)

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

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

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

  7. [POJ 2559]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 单调队列||单调栈

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

随机推荐

  1. [zz] 安装PostGIS(Linux篇)

    0.安装PostgreSQL数据库 参考安装PostgreSQL数据库(Linux篇). 1.安装proj4 #tar zxvf proj-4.8.0.tar.gz#cd proj-4.8.0#./c ...

  2. ArcEngine10:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components.

    在Program.cs中添加ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);如下 static voi ...

  3. Excel 数据分析技巧

    分享一个小技巧,Excel中,统计数据后,根据数据点之间的趋势,描绘出大致的曲线图,并且得到对于的公式. 1. 给出示例数据 2. 插入->散点图,右键点,选择添加趋势线,可以根据点数的走向,来 ...

  4. vc 编译执行bat

    转载:

  5. String inputStream file转化

    String --> InputStreamByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); Inp ...

  6. 配置ADB 工具 (Win7_64)

    ADB (Android Debut Bridge) ADB这个工具, 让我们可以用电脑来操纵手机 Android studio 安装好之后在SDK 中就有ADB 但是我们想使用它还需要配置它的环境变 ...

  7. The content of element type "sqlMapConfig" is incomplete,

    The content of element type "sqlMapConfig" is incomplete, it must match "(properties? ...

  8. Oracle数据库间的数据复制 - SQLPlus中的COPY命令

    Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同. 根据9i文档,说Copy命令未来会不支持,但实际上Oracle 11g仍然支持 ...

  9. EXTJS 4.2 资料 控件之btn设置可否点击

    1.下面是一个btn按钮的代码,默认不可以点击 { id: 'skipStep3', disabled: true,//默认不可点击 text: "跳转第三步", handler: ...

  10. c# Oracle 远程连接方式 plsql 连接oracle 11g 64位

    1.本地连接字符串:   string connect = "Data Source=orcl;user=XXX;password=XXX;Persist Security Info=Tru ...