FZU 1894 志愿者选拔

我并没有多想,他们是用的数组模拟队列,然而我就是优化循环次数过得

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int node[1000010];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        char op[20],name[20];
        int all = 0,s = 0,max = -99,maxid = 0;
        while(~scanf("%s",op))
        {
            if(op[0] == ‘S‘) continue;
            if(op[0] == ‘C‘)
            {
                scanf("%s",name);
                scanf("%d",&node[all]);
                if(node[all] > max)
                {
                    max = node[all];
                    maxid = all;
                }
                ++all;
            }
            else if(op[0] == ‘G‘)
            s++;
            else if(op[0] == ‘Q‘)
            {
                if(s > all)
                {
                    puts("-1");
                    continue;
                }
                if(s < maxid)
                {
                    printf("%d\n",max);
                    continue;
                }
                max = -99;
                for(int i = s;i < all;i++)
                {
                    if(node[i] > max)
                    {
                        max = node[i];
                        maxid = i;
                    }
                }
                if(max == -99)
                {
                    puts("-1");
                    continue;
                }
                printf("%d\n",max);
            }
            else break;
        }
    }
    return 0;
}
时间: 2025-01-19 22:28:56

FZU 1894 志愿者选拔的相关文章

FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】

?Problem 1894 志愿者选拔 Accept: 1770????Submit: 5523 Time Limit: 1500 mSec????Memory Limit : 32768 KB ?Problem Description 世博会立即就要开幕了,福州大学组织了一次志愿者选拔活动.參加志愿者选拔的同学们排队接受面试官们的面试.參加面试的同学们依照先来先面试而且先结束的原则接受面试官们的考查.面试中每一个人的人品是主要考查对象之中的一个.(提高人品的方法有扶老奶奶过街,不闯红灯等)作为

FZU 1894 志愿者选拔 单调队列

训练赛的题…… 暴力一波明显超时…… 最近刚学stl 感觉是优先队列 但还是太会用…… 以后可以试一下优先队列…… 比赛之后百度了一下 发现是单调队列…… 看起来挺简单的 也算个模版题吧…… 总之思路就是维护一个单调队列…… 有用的的只有C G Q…… 那个长度最多是5的名字只用接着 根本没用…… 直接上代码…… #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm&g

暑期训练狂刷系列——Foj 1894 志愿者选拔 (单调队列)

题目连接: http://acm.fzu.edu.cn/problem.php?pid=1894 解题思路: 因为出队和入队都满足队列的性质,优先单调队列的优先级有进入队列的顺序和人品的高低,在一段区间中如果出现x[i]是最大的,那么[0,i-1]区间内的数就不用记录了,所以单调队列里面可以按照人品值降序排列,输出的时候判断一下当前元素是否已经出队即可. 1 #include <cstdio> 2 #include <cstring> 3 using namespace std;

fzu 1894 单调队列

http://acm.fzu.edu.cn/problem.php?pid=1894  Problem 1894 志愿者选拔 Accept: 1328    Submit: 4200Time Limit: 1500 mSec    Memory Limit : 32768 KB  Problem Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查.面试中每个

志愿者选拔(单调队列)

Problem 1894 志愿者选拔 Accept: 1783    Submit: 5564 Time Limit: 1500 mSec    Memory Limit : 32768 KB  Problem Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查.面试中每个人的人品是主要考查对象之一.(提高人品的方法有扶老奶奶过街,不闯红灯等)作为主面试官的

【UOJ 55】志愿者选拔

[题目描述]: 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动. 参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查. 面试中每个人的人品是主要考查对象之一.(提高人品的方法有扶老奶奶过街,不闯红灯等) 作为主面试官的John想知道当前正在接受面试的同学队伍中人品值最高的是多少.于是他请你帮忙编写一个程序来计算. [输入描述]: 输入数据第一行为一整数T,表示有T组输入数据. 每组数据第一行为”START”,表示面试开始 接下来

志愿者选拔

题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手.现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩. 输入 第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),

单调栈/单调队列/RMQ

在上上周的交友大会中,队长大人提到了st算法,然后仔细的发呆了一个星期,于是就开始做队长的专题了, 6天后的我总算在此专题做题数目和队长一样了..明早没课,准备通宵把这几天的零散的记忆整理一下. HDU 3530 Subsequence 一开始想为何不能m和k一起放到while语句里进行处理 nowmax和nowmin保存了i之前的最大和最小值,假设此时已经出现不满足k和m的序列(A)了(比k大or比m小or both),然后我们往后找,发现了一个比序列(A)的min更小的值(me),此时now

博弈入门

巴什博奕 巴什博奕: 题目的  类型就是 各位勇敢者要玩的第一个游戏是什么呢?很简单,它是这样定义的: 1. 本游戏是一个二人游戏; 2. 有一堆石子一共有n个: 3. 两人轮流进行; 4. 每走一步可以取走1…m个石子: 5. 最先取光石子的一方为胜: 如果游戏的双方使用的都是最优策略,请输出哪个人能赢. 巴什博弈: 以上面的 题目为例   当 最后剩下只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 只要能做到  给对方  留下 m+1 个 物品