题意:
给出n个元素,元素可交换或减小,求最终缺少的最小正整数的最大值(mex)。
仔细观察我们不难看出当n个元素为从1~n递增时mex取最大值,如n=5时,1,2,3,4,5,mex取最大值6。所以我们就将数列尽量接近连续递增数列。
如1 3 3 3 6可改为1 2 3 3 4则取最大值mex为5。
附AC代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 const int MAX=101000; 8 9 int a[MAX]; 10 11 int main(){ 12 int n; 13 while(cin>>n){ 14 for(int i=0;i<n;i++){ 15 cin>>a[i]; 16 } 17 int ans=1; 18 sort(a,a+n);//排序 19 for(int i=0;i<n;i++){ 20 if(a[i]>=ans)//注意等于 21 ans++; 22 } 23 cout<<ans<<endl; 24 } 25 return 0; 26 }