cf的题目https://codeforces.com/contest/1777/problem/C
只有框框内代码不同,其他都一样,不知道为什么会有错误
下面是我的代码
#include<bits/stdc++.h>
using namespace std;
using i64=long long;
int t,vis[200005],temp;
const int N=1e5;
vector<int>divs[N];
void solve(){
int n,m;cin>>n>>m;
vector<int>c(n);
for(int i=0 ;i<n;i++){
cin>>c[i];
}
sort(c.begin(),c.end());
int ans=1e9;
int bad = m;
vector<int>cnt(m+1);
for(int i=0,j=0;i<n;i++){
while(j<=n && bad>0){
if(j<n){
for(auto x:divs[c[j]]){
if(x<=m){bad -= !cnt[x]++;}
}
}
j++;
}
if(j<=n)ans=min(ans,c[j-1]-c[i]);
for(auto x:divs[c[i]]){
if(x<=m)bad+=!--cnt[x];
}
}
if(ans==1e9)ans=-1;
cout<<ans<<endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
for(int i=1 ;i<=N;i++){
for(int j=i ;j<=N;j+=i){
divs[j].push_back(i);
}
}
cin>>t;
while (t--) {
solve();
}
return 0;
}