CF E 求调/ll
  • 板块学术版
  • 楼主3a51_
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/5/20 00:36
  • 上次更新2023/10/28 01:05:26
查看原帖
CF E 求调/ll
327444
3a51_楼主2022/5/20 00:36

RT,不知道哪里错了。

#include<bits/stdc++.h>
#define int long long
#define Tothetime_tolife using
#define AK namespace
#define IOI std
Tothetime_tolife AK IOI;
const int Mod1=998244353;
const int Mod2=1000000007;
int gcd(int a,int b){return __gcd(a,b);}
int lcm(int a,int b){return a*b/gcd(a,b);}
void read(int& x){char ch;int f=1;x=0;while(ch<'0'||ch>'9'){ch=getchar();if(ch=='-') f=-1;}while(ch>='0'&&ch<='9'){ch=getchar();x=x*10+ch-'0';}x*=f;}
void write(int x){if(x>9){write(x/10);}putchar(x%10+'0');return;}
const int N=100005;
int a[N];
signed main(){
	ios::sync_with_stdio(false);
	int tst;
	cin>>tst;
	while(tst--){
				int n,k;
		cin>>n>>k;
		a[0]=-1;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		int res=n,now=0;
		sort(a+1,a+n+1);
		for(int i=1;i<=n;i++){
			if(a[i]!=a[i-1]){
				now++;
			}
			if(a[i]!=now-1){
				res=i-1;
				break;
			}
		}
		if(k>=n-res){
			cout<<0<<endl;
			continue;
		}else{
			int p=res+k,mex=n;
			int diff=k;
			for(int i=1;i<=n-k;i++){
				if(a[i]!=a[i-1]) diff++;
			}
			for(int i=1;i<=n;i++){
				if(a[i]>a[i-1]+1){
					int tot=a[i]-a[i-1]-1;
					if(k>=tot) k-=tot;
					else{
						mex=a[i-1]+k+1;
						break;
					}
				} 
			}
			cout<<diff-mex<<endl;
		}
	}
	return 0;
}
//STO 来看我程序的人 Orz

2022/5/20 00:36
加载中...