• 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;
    }
    
    
    
     
  • 相关阅读:
    四、java IO--使用字节流拷贝文件
    三、java IO--使用字节流写入文件
    二、java IO--使用字节流读取文件
    一、java--IO概念
    xml解析/读取--dom4j
    java程序执行顺序
    Flask学习——cookie操作
    Linux13 shell函数、数组及awk、awk中的数组
    Linux12 RPM 和yum的使用
    Linux11 IP网段划分及主机接入网络
  • 原文地址:https://www.cnblogs.com/nomonoyumei/p/3495206.html
Copyright © 2020-2023  润新知