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
  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4338230.html
Copyright © 2011-2022 走看看