社区讨论

12pts求hack

P8656[蓝桥杯 2017 国 B] 对局匹配参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mi0v9wx8
此快照首次捕获于
2025/11/16 06:37
3 个月前
此快照最后确认于
2025/11/17 09:11
3 个月前
查看原帖
CPP
//#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define lb long double
#define il inline
#define endl '\n'
#define ull unsigned long long
#define llt __int128
#define gcd(x,y) __gcd(x,y)
#define lcm(x,y) ((x)*(y)/(gcd(x,y))) 
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); 
#define fff(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
#define ls (k<<1)
#define rs (k<<1|1)
#define umap unordered_map
#define uset unordered_set
#define mmap multimap
#define mset multiset
#define pb push_back
#define pii pair<int,int>
#define pll pair<long long,long long>
#define psi pair<string,int>
#define psl pair<string,long long>
#define gc getchar
#define numpy(a,n) a+1,a+n+1
#define fi first
#define copy(a,b) memcpy(a,b,sizeof(a))
#define se second
#define clr(a) memset(a,0,sizeof(a))
#define mem(a,v)	memset(a,v,sizeof(a))
#define lowbit(x) (x&(-x))
#define all(s) s.begin(),s.end()
#define mkp make_pair
#define maxi INT_MAX
#define maxl LONG_LONG_MAX
#define mini INT_MIN\
#define minl LONG_LONG_MIN
#define debug(x) cerr<<#x<<"="<<(x)<<'\n' 
#define hmod 212370440130137957ll
#define sss "--------------------------------------------------"
//-----------------------------------------------------------------------------
const int N=1e5+5;
int a[N];
int n,k;
umap<int,int>mp;
struct node{
	int data,num;
	bool operator<(const node &s)const{
		return s.data>data;
	}
};
priority_queue<node>q;
vector<int>last;
signed main(){
//	fff("")
	IOS
	cin>>n>>k;
	for(int i=1;i<=n;i++)	cin>>a[i],mp[a[i]]++;
	if(k==0){
		cout<<mp.size();
		return 0;
	}
	int maxx=*max_element(numpy(a,n));
	// cout<<maxx;
	int minn=*min_element(numpy(a,n));
	for(int i=minn;i<=maxx;i++){
		if(mp[i]!=0){
			q.push({mp[i],i});
		}
	}
	ll ans=q.top().data;
	last.pb(q.top().num);
	q.pop();
	while(!q.empty()){
		auto [f1,f2]=q.top();
		// cout<<f1<<" "<<f2<<endl;
		bool f=1;
		for(auto i:last){
			if(abs(f2-i)==k){
				f=0;
				break;
			}
		}
		if(f){
			last.pb(f2);
			ans+=f1;
			// cout<<f2<<endl;
		}
		q.pop();
	}
	cout<<ans;
	return 0;	
}	
//CODE BY tc291311 Luogu uid1340395 in VScode

回复

0 条回复,欢迎继续交流。

正在加载回复...