Codeforces 358 . B Alyona and Mex

来源:互联网 发布:higo出租软件 编辑:程序博客网 时间:2024/05/01 17:48

    集训第一天,有段时间没有敲代码,被虐得体无完肤……

    比完后仔细看看题解,哎……还是自己水平太水。不管怎么样,集训第一天,不管前路多么坎坷,以最大的决心和努力奋斗就好。

    话不多说,上题:

B. Alyona and Mex
time limit per test
 1 second
memory limit per test
 256 megabytes
input
 standard input
output
 standard output

Someone gave Alyona an array containing n positive integers a1, a2, ..., an. In one operation, Alyona can choose any element of the array and decrease it, i.e. replace with any positive integer that is smaller than the current one. Alyona can repeat this operation as many times as she wants. In particular, she may not apply any operation to the array at all.

Formally, after applying some operations Alyona will get an array of n positive integers b1, b2, ..., bn such that 1 ≤ bi ≤ ai for every1 ≤ i ≤ n. Your task is to determine the maximum possible value of mex of this array.

Mex of an array in this problem is the minimum positive integer that doesn't appear in this array. For example, mex of the array containing 13 and 4 is equal to 2, while mex of the array containing 23 and 2 is equal to 1.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of elements in the Alyona's array.

The second line of the input contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — the elements of the array.

Output

Print one positive integer — the maximum possible value of mex of the array after Alyona applies some (possibly none) operations.

Examples
input
51 3 3 3 6
output
5
input
22 1
output
3
Note

In the first sample case if one will decrease the second element value to 2 and the fifth element value to 4 then the mex value of resulting array 1 2 3 3 4 will be equal to 5.

To reach the answer to the second sample case one must not decrease any of the array elements.

    分析题目前吐槽一下,英文题实在不习惯,像我这种菜鸟级别的井底之蛙没做过什么英文题,第一次看到英文题实在看不懂题目要干嘛……看懂了之后感觉题目真心是说了好多好多不需要讲的东西……看来英文水平急需加强。
    该题题意大概是,手动输入一个长度为n的数组,然后数组中的任何一个元素都可以将它转变为一个比它小的数,要求找出最大的(在数组中不存在的最小的数)。题意其实看懂了挺水,就是将数组转换成连续的,运用贪心法的思想最后一个数加一即为最终所求数,以1 3 3 3 6为例,转换成 1 2 3 3 4 则在数组中未出现的最小的数是5,此时它最大。解决方法:先将数组排序,后根据数值变换res的值,在连续几个数相同的情况下,res的值不发生变化。
    见AC代码:
//运用贪心法  使所有数字变换成连续的非递减的   末尾数字加一 即为所求最大 #include<stdio.h>#include<algorithm>using namespace std;const int maxn=100001;int a[maxn];int main(){int n;scanf("%d",&n);for(int i=0; i<n; i++)scanf("%d",&a[i]);sort(a,a+n);int res=0;//理解: 若数组是1 2 3 4 5 则结果为6 //  1 3 3  3 5 转化成 1 2 3  3 4  结果为5//   1 3 3 3 5    for(int i=0; i<n; i++)if(a[i]>res)  //res 不可能大于a[i]  这里排除的是等于a[i]的情况  //这种情况下  a[i]不可能转化成比前面数字更小 所以res不需要加 {//printf("a[%d]=%d\n",i,res);res++;}res++;//找到了转化后数组的最后一个元素的值  后按照题目要求需要在它的基础上再加一printf("%d\n",res);}
    总结:该题的主要难点是理解题目的意思,感觉如果彻底弄清楚解题步骤的话,写出代码不是问题。分析需要仔细谨慎,考虑全面。现阶段还是水平太菜,见识太浅,唯有努力刷题刷题再刷题。另外英文水平和赛场心理素质都急需增强。敲代码完整理解好题目后再下手,切忌冒进烦躁。


0 0