zoukankan      html  css  js  c++  java
  • Sicily课程练习 1012. 叠罗汉

    Description

    最近叠罗汉成为一种时尚运动,于是有了叠罗汉社……

    或许有人比较out,不清楚这种运动的规则,简单来说:就是人叠人,第一个人站在地面,第二个人站在第一个人的肩膀,第三个人站在第二个人的肩膀,依次类推。看过杂技表演的应该明白的。

    当然,是人肯定都不希望自己在下面,特别是当女朋友要找的时候,突然发现自己在罗汉塔最底层……

    现在ikuy就恰好遇到了这个问题……

    Ikuy正在玩叠罗汉游戏,突然电话响了,是GF的,苦于自己正在罗汉塔某个位置,没法接电话,已经知道电话会响 X 单位时间(每次都这样,是约定,如果ikuy不接电话就会被罚一顿饭,连续3次不接就88)。Ikuy很郁闷,想知道自己能不能在规定时间内去接到电话——他必须在规定时间内从罗汉塔中解脱出来。

    不过这时他不清楚自己的具体位置,只知道整个游戏已经进行了的过程。

    需要你帮忙了……

    已经知道过程中每个步骤是这样描述的:

     R   表示编号为R的社员爬上去了;

     -1  表示最顶上的那个社员下来了;

    其中 R 是不大于10000的正整数,保证所有数据合法,即对于第一条命令,保证R此时不在罗汉塔中;

    一共有M条命令,经过M条命令后得到现在的罗汉塔;

    开始计算时间:

    此时,对于第i层的社员,要下来,需要花费的时间是i-1单位时间,ikuy要解放就必须在他上面的所有社员+他本身都从罗汉塔上下来。

    哦,忘记了,ikuy的编号是N。

    现在希望你能反馈出:ikuy是否能接到电话……

    备注:如果需要花费时间和X相等也算接到电话;

    Input

    输入第一行为T,表示有T组测试数据;

     对于每组测试数据格式如下:

     第一行为3个整数N,M,X。意义如题目描述;

     接下来M行每行有一个整数,表示各个步骤;

     规定N不大于10000,M不大于1000,X不大于50000

    Output

    对于每组测试数据,如果可以接到电话,请输出YES,否则输出NO

     每组输出为一行;

    Sample Input
     Copy sample input to clipboard
    2
    3 8 5
    1
    -1
    4
    3
    -1
    2
    3
    1
    3 8 3
    1
    -1
    4
    3
    -1
    2
    3
    1
    
    Sample Output
    YES
    NO

    思路:只需开一个数组,模拟整个叠罗汉的过程,一个变量记录最后操作完毕后,叠罗汉的人数。这样确定起ikuy的位置也很方便,只需要for循环遍历数组,匹配ikuy的位置。剩下的就是累加咯,自己想。

    代码+少量注释:
    #include <iostream>
    #include <stack>
    #include <string>
    using namespace std;
    int main(){
        int i, txcase, ikuy, numofcommand, GFtime, command;
        cin >> txcase;
        while(txcase--){
            int Pyramid[1000];//模拟叠罗汉的数组
            int upnum = 0;//上去的指令数目
            int pos = -1;//记录ikuy的的位置,默认不在栈内
            int totaltime = 0;
    
            cin >> ikuy >> numofcommand >> GFtime;
            
            for(i = 0; i < numofcommand;i++){
                cin >> command;
    
                if(command != -1){//有人叠上去了
                    Pyramid[upnum] = command;
                    upnum++;
                }
                else
                    upnum--;
            }
    
            for(i = 0; i < upnum; i++){
               if(Pyramid[i] == ikuy)
                    pos = i;
            }
            
            if(pos == -1){//默认情况,不在栈内
               totaltime = 0;
            }
            else{
               for(i = pos;i < upnum;i++)
                     totaltime += i;
            }
    
            if(totaltime <= GFtime)
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
        }
    
        return 0;
    }
    
    
    
     
  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/nomonoyumei/p/3495206.html
Copyright © 2011-2022 走看看