优惠券

时间限制:1秒

空间限制:32768K

美团点评上有很多餐馆优惠券,用户可以在美团点评App上购买。每张优惠券有一个唯一的正整数编号。当用户在相应餐馆就餐时,可以在餐馆使用优惠券进行消费。优惠券的购买和使用按照时间顺序逐行记录在日志文件中,运营人员会定期抽查日志文件看业务是否正确。业务正确的定义为:一个优惠券必须先被购买,然后才能被使用。

某次抽查时,发现有硬盘故障,历史日志中有部分行损坏,这些行的存在是已知的,但是行的内容读不出来。假设损坏的行可以是任意的优惠券的购买或者使用。

现在问这次抽查中业务是否正确。若有错,输出最早出现错误的那一行,即求出最大s,使得记录1到s-1满足要求;若没有错误,输出-1。

输入描述:
m 分别表示 m (1 ≤ m ≤ 5 * 10^5) 条记录。下面有m行,格式为:I x (I为Input的缩写,表示购买优惠券x);O x(O为Output的缩写,表示使用优惠券x);? (表示这条记录不知道)。这里x为正整数,且x ≤ 10^5 。
输出描述:
-1 或 x(1 ≤ x ≤ m) 其中x为使得1到x-1这些记录合法的最大行号。
输入例子:
0
1
O 1
2
?
O 1
3
I 1
?
O 1
2
I 2
O 1
输出例子:
-1
1
-1
-1
2

解题思路:将所有的问号插入set中并记录每种优惠券获得或使用的时间,若不是问号则判断这次操作后这种优惠券数量是否大于1或小于0,若是,则找这种优惠券上次出现之后的问号是否存在,若存在分两种情况:若优惠券数量大于1,则优惠券数量减一,否则就加一,若不存在,则该位置出错

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <map>
#include <climits>using namespace std;#define LL long long
const int INF = 0x3f3f3f3f;int n;
char ch[500005][10];
int cnt[100005],f[100005],x[500005];int main()
{while(~scanf("%d",&n)){set<int>s;for(int i=1;i<=n;i++){scanf("%s",ch[i]);if(ch[i][0]!='?') scanf("%d",&x[i]);}int flag=1;for(int i=1;i<=n;i++){if(ch[i][0]!='?'){scanf("%d",&x[i]);cnt[x[i]]+=(ch[i][0]=='I'?1:-1);if(cnt[x[i]]<0||cnt[x[i]]>1){if(s.lower_bound(f[x[i]])==s.end()) {flag=0;printf("%d\n",i);break;}s.erase(s.lower_bound(f[x[i]]));cnt[x[i]]=min(max(cnt[x[i]],0),1);}f[x[i]]=i;}else s.insert(i);}if(flag) printf("-1\n");}return 0;
}

美团codeM资格赛 优惠券相关推荐

  1. 2018美团codeM资格赛——python代码

    2018美团codeM资格赛--python代码 第一题:下单 题目描述 美团在吃喝玩乐等很多方面都给大家提供了便利.最近又增加了一项新业务:小象生鲜.这是新零售超市,你既可以在线下超市门店选购生鲜食 ...

  2. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)

    题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时 ...

  3. loj 6085.「美团 CodeM 资格赛」优惠券

    题目: 一个有门禁的大楼,初始时里面没有人. 现在有一些人在进出大楼,每个人都有一个唯一的编号.现在有他们进出大楼的记录,但是有些被污染了,只能知道这里有一条记录,具体并不能知道. 一个人只有进大楼, ...

  4. 美团CodeM 资格赛第一题

    美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一个长度和第 ...

  5. loj 6083.「美团 CodeM 资格赛」数码

    题目: 给定两个整数\(l\)和\(r\),对于任意\(x\),满足\(l\leq x\leq r\),把\(x\)所有约数写下来. 对于每个写下来的数,只保留最高位的那个数码.求\([1,9]\)中 ...

  6. 美团codeM资格赛——世界杯

    一.题目描述 世界杯就要开始啦!真真正正的战斗从淘汰赛开始,现在我们给出球队之间的胜负概率,来预测每支球队夺冠的可能性. 在接下来的篇幅中,我们将简单介绍淘汰赛阶段的规则. 淘汰赛阶段的90分钟常规时 ...

  7. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队

    #6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...

  8. 2018美团CodeM 题解

    2018美团CodeM 题解 我现场打了3题,看看稳进复赛,就不打了. T1 这题很简单,先扫一趟刷出最大值,标记最大值出现的时候,然后在扫一遍输出答案,这样效率高. 代码如下: #include&l ...

  9. LibreOJ #6177. 「美团 CodeM 初赛 Round B」送外卖2【状压DP】

    「美团 CodeM 初赛 Round B」送外卖2 内存限制:32 MiB 时间限制:200 ms 题目描述 一 张 n 个 点 m 条 有 向 边 的 图 上 , 有 q 个 配 送 需 求 , 需 ...

最新文章

  1. tableau技术小积累
  2. 《Python面向对象编程指南》——1.2 基类中的__init__()方法
  3. Android设备音频部分一些概念
  4. mybitas oracle.sql.clob,Oracle使用简单函数
  5. 强连通分量(Strongly_Connected_Components)
  6. 每天一道LeetCode-----在有序的二维数组中查找某个元素
  7. Three.js之渲染器
  8. Getting started with caffe questions answers (摘选)
  9. vs该文件没有与之关联的应用来执行该操作_Hadoop大数据实战系列文章之Zookeeper...
  10. java项目响应慢_java-项目运行缓慢
  11. APM代码学习笔记1
  12. (译)如何制作一个类似tiny wings的游戏:第二部分(完) - 子龙山人 ...
  13. 服务器证书有问题苹果手机,iPhone应用程序中的“服务器证书不可信”错误
  14. 随机森林oob_score及oob判断特征重要性
  15. JAVASCRIPT实现基于文本的自动智能聊天机器人
  16. Android显示横幅样式通知
  17. 百度UEditor编译器中获取HTML内容和纯文本,设置UEditor编辑器的内容
  18. 遥感(1):遥感是什么?
  19. 手机火狐浏览html文件在哪里,火狐手机浏览器书签在哪?
  20. U3D插件 CSVSerialize(CSV转Scriptable)

热门文章

  1. 微型计算机控制数字量输入输出,计算机控制系统输入/输出通道
  2. 红楼梦词云制作(带背景)
  3. Kali [CobaltStrike]CS神器
  4. [计算机网络] 实验 5 电子邮件
  5. 【漫画科普】什么是PAM4
  6. 计算机中丢失rtutil,api-ms-win-core-winrt-string-l1-1-0.dll从您的计算机中丢失
  7. unity给物体更改颜色
  8. 世界第一台电子计算机到底是谁?
  9. 太原市消防工程师培训_关于消防工程师的满满干货
  10. vue中svg转png下载