算法提高 幸运顾客

算法提高 幸运顾客

时间限制:2.0s 内存限制:256.0MB
提交此题
  为了吸引更多的顾客,某商场决定推行有奖抽彩活动。“本商场每日将产生一名幸运顾客,凡购买30元以上商品者均有机会获得本商场提供的一份精美礼品。”该商场的幸运顾客产生方式十分奇特:每位顾客可至抽奖台抽取一个幸运号码,该商场在抽奖活动推出的第i天将从所有顾客中(包括不在本日购物满30元者)挑出幸运号第i小的顾客作为当日的幸运顾客。该商场的商品本就价廉物美,自从有奖活动推出后,顾客更是络绎不绝,因此急需你编写一个程序,为他解决幸运顾客的产生问题。

【输入数据】
  第1行一个整数N,表示命令数。
  第2~N+1行,每行一个数,表示命令。如果x>=0,表示有一顾客抽取了号码x;如果x=-1,表示傍晚抽取该日的幸运号码。
【输出数据】
  对应各命令-1输出幸运号码;每行一个号码。(两个相同的幸运号看作两个号码)
样例输入
6
3
4
-1
-1
3
-1
样例输出
3
4
4
解释
  只关注获奖的号码是多少,每个号码可以获奖多次。
数据规模及约定
  共10组数据。
  对100%的数据,N=10^6所有命令为-1或int范围内的非负数,前i的命令中-1的数量不超过[i/2](向下取整)。

这道题蓝桥杯评测出了问题,交其他代码也会出错,自己使用multiset写了一个,也不知道对不对
思路就是元素存在multiset都是有序的,并且可重复,它这道题就是求第i天第i小的,设置一个变量记录第几天就可以了,然后迭代到这个位置输出元素

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<list>
#include<deque>
#include<set>
#include<map>
#include<stack>

using namespace std;

int main(){
//  freopen("in.txt","r",stdin);
//  freopen("out.txt","w",stdout);
    int n,sum=0;
    cin>>n;
    multiset<int> ss;
    multiset<int>::iterator it;
    while(n--){
        int temp;
        cin>>temp;
        if(temp!=-1){
            ss.insert(temp);
        }else{
            int n=sum;
            it=ss.begin();
            while(n--){
                it++;
            }
            cout<<*it<<endl;
            sum++; 
        }
    }
    return 0; 
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值