无头无脑的贪心过了,求大佬证明贪心的正确性
  • 板块P1978 集合
  • 楼主STUDENT00
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/9/17 19:59
  • 上次更新2023/10/27 11:09:10
查看原帖
无头无脑的贪心过了,求大佬证明贪心的正确性
658786
STUDENT00楼主2022/9/17 19:59

代码如下(排序去重后开始选择是否有加进集合):

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
long long a[100010]; 
bool vis[100010];
int find(int l,int r,long long k){
	while(l<r){
		int mid=(l+r)>>1;
		if(a[mid]>=k) r=mid;
		else l=mid+1;
	}
	if(a[l]==k) return l;
	else return 0;
}
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]); 
	sort(a+1,a+n+1);
	n=unique(a+1,a+n+1)-a-1;
	for(int i=1;i<=n;i++){
		if(a[i]%k==0){
			long long p=a[i]/k;
			int q=find(1,i,p);
			if(!vis[q]){
				vis[i]=1;
				ans++;
			}
		}else{
			vis[i]=1;
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}
2022/9/17 19:59
加载中...