zoukankan      html  css  js  c++  java
  • 广工校赛——小明在工作

    Description

    小明的工作是负责记录饭堂中正在排队的人的信息 
    在他的工作中会有三种可能的事件发生: 
        1.编号为id的学生加入到队伍的最后面 
        2.排在最前面的学生打完饭离开了队伍 
        3.老板过来询问当前排在队伍前方第k个的学生的编号 
    由于每天的工作量太大(每天最多有100000个以上事件发生), 
    小明苦不堪言,让你写个程序帮他 

    Input

    输入的第一个数是正整数T,表明接下来有T组数据 
    每组数据的第一个数为正整数n,表示有n件事会发生 
    接下来有n行,每行分别表示上诉三种事件的其中一种,格式分别如下: 
    1 id 

    3 k 
    注意当队伍中已经没人的时候请忽略第2种事件,每组数据新开始的时候队伍中人数都为0

    Output

    对于给个第3种的事件,请输出第k个学生的编号, 
    如果队伍的人数小于k,输出“na li you zhe me duo ren”。

    Sample Input

    2 5 1 1 1 2 3 1 2 3 1 2 1 1 3 2

    Sample Output

    1 2 na li you zhe me duo ren

    HINT

    大意:- -||傻逼一样看了题目觉得是队列后来又发现要读出第K个数,需要一个循环把所有的队列值都拿出来读出那个K值再放进去结果超时,看了别人的代码~~~~只能膜拜orzorzorz——————其实就是数组,用一个标记,标记当前的第一个人在哪儿。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const int MAX = 1000010;
    int a[MAX];
    int main()
    {
        int T,n,m,k,number,flag1,flag2;
        cin >> T;
        while(T--){
            flag1 = flag2 = 0;
            cin >> n;
            while(n--){
                scanf("%d",&m);
              if(m == 1){
                    scanf("%d",&number);
                    a[flag1++] = number;
              }
              else if(m == 2){
                    if(flag2 < flag1) flag2++;
              }
              else {
                    scanf("%d",&k);
                    if(k > flag1 - flag2) printf("na li you zhe me duo ren
    ");
                    else printf("%d
    ", a[flag2+k-1]);
              }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    视频监控中运动物体检测与跟踪----相邻帧差法和三帧差法
    辨异 —— 近义词(词组)
    H264 编解码框架简单介绍
    一个build.xml实例
    SQL server 错误代码对比表
    怎样使用oracle 的DBMS_SQLTUNE package 来执行 Sql Tuning Advisor 进行sql 自己主动调优
    Android中ExpandableListView控件基本使用
    c++中sort()及qsort()的使用方法总结
    Oracle动态SQL语句
    Oracle Minus 取差集
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4338230.html
Copyright © 2011-2022 走看看