http://codeforces.com/problemset/problem/862/A
给出一串数列,再给出一个数,每次操作可以加上一个数或者去掉一个数,询问至少操作多少次可以使得所给出的数是从0开始递增产生的数列中最小的且没出现的数
把数列排序后从头开始模拟即可
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,k;
while(cin>>n>>k){
int a[1111];
int i,j;
for(i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
int z=0;
int ans=0;
i=0;
while(i<=k&&z<n)
{
if(i==k&&i==a[z])
{
ans++;break;
}
else if(i==k)
{
break;
}
if(i<k&&i<a[z])
{
i++;
ans++;
}
else if(i<k&&i==a[z])
{
i++;
z++;
}
else if(i<k&&i>a[z])
{
z++;
}
}
if(k>a[n-1])ans+=k-a[n-1]-1;
cout<<ans<<endl;
}
return 0;
}

本文介绍了一道CodeForces平台上的题目——862A的解题思路与实现方法。该题要求在给定数列的基础上通过增加或删除元素的操作,使得指定的目标数成为数列中最小的未出现的正整数。文章详细解释了通过排序和模拟的方式解决此问题的具体步骤。
589

被折叠的 条评论
为什么被折叠?



