最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Max and Mex

IT圈 admin 3浏览 0评论

Max and Mex

题目🔗Problem - B - Codeforces
暴力写会TLE

我们分析一下数据的特点,a为max值,b为mex值,t为增加的值

   b值的大小有两种情况,要么大于a  要么小于a,不可能相等

当大于a时(b=a+1),t 的值一定为 a+1/或者b

当小于a时,t 的值小于a

        我们还可以对 t 的值讨论

AC代码(不是最优代码,但是时好代码)

#include<bits/stdc++.h>
using namespace std;
int mx=0,ln=0,ans=0;
map<int,int>mp;
int bit(int a)
{for(int i=a;i<=1000000001;i++)if(mp[i]==0)	return i;
}
int main()
{ios::sync_with_stdio(false);int T;cin>>T;while(T--){mp.clear();ans=0;mx=0;ln=0;int m,n,x;cin>>m>>n;for(int i=1;i<=m;i++){cin>>x;if(x==ln)	ln++;if(mp[x]==0)	ans++;mp[x]++;if(mx<x)	mx=x;}while(n--){ln=bit(ln);if(mx<ln){ans=ans+n+1;break;}	else if(mx>ln){int t=(ln+mx+1)/2;if(mp[t]>=1){break;}else{ans++;mp[t]++;}}}cout<<ans<<'\n';}return 0;
}

Max and Mex

题目🔗Problem - B - Codeforces
暴力写会TLE

我们分析一下数据的特点,a为max值,b为mex值,t为增加的值

   b值的大小有两种情况,要么大于a  要么小于a,不可能相等

当大于a时(b=a+1),t 的值一定为 a+1/或者b

当小于a时,t 的值小于a

        我们还可以对 t 的值讨论

AC代码(不是最优代码,但是时好代码)

#include<bits/stdc++.h>
using namespace std;
int mx=0,ln=0,ans=0;
map<int,int>mp;
int bit(int a)
{for(int i=a;i<=1000000001;i++)if(mp[i]==0)	return i;
}
int main()
{ios::sync_with_stdio(false);int T;cin>>T;while(T--){mp.clear();ans=0;mx=0;ln=0;int m,n,x;cin>>m>>n;for(int i=1;i<=m;i++){cin>>x;if(x==ln)	ln++;if(mp[x]==0)	ans++;mp[x]++;if(mx<x)	mx=x;}while(n--){ln=bit(ln);if(mx<ln){ans=ans+n+1;break;}	else if(mx>ln){int t=(ln+mx+1)/2;if(mp[t]>=1){break;}else{ans++;mp[t]++;}}}cout<<ans<<'\n';}return 0;
}

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论