【小染心得】:桶的灵活应用
题目描述
今天是最后一次周赛,也是小Z的生日,小Z想参加这场周赛并且做出所有题目,来给自己一个最好的生日礼物,这道题就是他周赛遇到的最简单的一道题。
给定一个数组a,里面有n个数字,定义美好数字为a数组中不存在的最小的非负数,比如数组{2,5,8}中的美好数字就是0,数组{0,1,2,5}中的美好数字就是3。
现在再给出一个数组b,里面有m个数,你可以将数组b中的至多k个数移动到a数组中,来增大a数组中美好数字的大小,求最大的美好数字。
输入
第一行输入n,m,k分别代表a数组,b数组的元素个数和k的大小
第二行输入n个数,代表数组a中的元素
第三行输入m个数,代表数组b中的元素
1<=n<=1000,0<=m<=1000,0<=k<=m,0<=ai<=1000,0<=bi<=1000;
输出
仅输出一行,表示最大的美好数字
样例输入 Copy
4 3 2
1 3 4 6
0 5 7
样例输出 Copy
2
#include<bits/stdc++.h>
using namespace std;
int main()
{ int n,m,k,x;
int a[100000]={0};//初始化
int b[100000]={0};
cin>>n>>m>>k;
int i,j=0;
for(i=0;i<n;i++)
{ cin>>x;
a[x]=1;//用桶来标记
}
for(i=0;i<m;i++)
{ cin>>b[i];
}
sort(b,b+m);//对数组b排序
for(i=0;i<m;i++)
{ if(a[b[i]]==0)//插入
{ a[b[i]]=1;
j++;
}
if(j>=k)break;
}
for(i=0;i<2000;i++)//幸好这题数据比较小
{ if(a[i]==0) //不然就栽了
{ cout<<i;break;
}
}
}