博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[题解]Mail.Ru Cup 2018 Round 1 - B. Appending Mex
阅读量:7021 次
发布时间:2019-06-28

本文共 1008 字,大约阅读时间需要 3 分钟。

【题目】

【描述】

Ildar定义了一种方法,可以由一个数组产生一个数。具体地,从这个数组中任选一个子集,不在这个子集中的最小的非负整数称为mex,就是由这个数组得到的数。初始时刻Ildar的数组是一个空数组,通过上述方法得到某个mex,加入到数组的尾端,不断重复以上操作。现在给你一个n长的数组a,问Ildar能否得到这个数组,如果能则输出-1,否则输出最小的整数t,表示数组的前t个数中至少有一个数不能得到。

数据范围:1<=n<=100000,0<=a[i]<=10^9

【思路】

要想得到数字0,可以选择空集作为子集;要想得到数字k,选择的子集必须包含{0,1,...,k-1}。于是,从前往后扫给的数组a,当前的数字最多能比之前出现过的数字大1,否则这个数字是不能被得到的,当前位置就是t。

【我的实现】

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 #define MaxN 100020 9 int a[MaxN];10 11 int main()12 {13 int n, x;14 int cur = -1;15 scanf("%d", &n);16 for(int i = 1; i <= n; i++)17 {18 scanf("%d", &x);19 if(x > cur + 1)20 {21 printf("%d", i);22 return 0;23 }24 cur = max(cur, x);25 }26 printf("-1");27 return 0;28 }
View Code

【评测结果】

转载于:https://www.cnblogs.com/CQBZOIer-zyy/p/9815784.html

你可能感兴趣的文章
c++和java字节高低位的转换
查看>>
XNA Game Studio4.0 Programming 随便读,随便记。
查看>>
用python实现字符串的替换
查看>>
统计vs机器学习,数据领域的“少林和武当”
查看>>
WCF概念
查看>>
用ChemDraw画3D图的方法
查看>>
上拉电阻大小对i2c总线的影响
查看>>
canvas绘图详解-04-矩形
查看>>
测试管理012:结对测试 - 不错的测试实践
查看>>
FusionCharts简单教程(二)-----使用js加载图像和setDataXML()加载数据
查看>>
C# 项目中的 bin 目录和 obj 目录的区别,以及 Debug 版本和 Release 版本的区别
查看>>
使用DataTable作为存储过程的参数
查看>>
Yslow
查看>>
git常用命令
查看>>
java虚拟机:堆内存
查看>>
由strcat函数引发的C语言中数组和指针问题的思考
查看>>
Const使用
查看>>
LeetCode:Plus One
查看>>
学习目标
查看>>
C#三种定时器的实现-转载
查看>>