求条
查看原帖
求条
1061770
technology_s楼主2024/5/4 20:38

崩,看半天没错,然后样例一个没过

#include<bits/stdc++.h>
using namespace std;
long long n,k,na,nb,a[110],l,r=1e18+1,ca[5000010],cb[5000010];
void dfs(long long i,long long sum){
	ca[++na]=sum;
	if(i>n){
		return;
	}for(long long j=1;;j*=a[i]){
		if(1e18/j<sum){
			break;
		}dfs(i+2,sum*j);
	}
}void dfs1(long long i,long long sum){
	cb[++nb]=sum;
	if(i>n){
		return;
	}for(long long j=1;;j*=a[i]){
		if(1e18/j<sum){
			break;
		}dfs(i+2,sum*j);
	}
}bool check(long long x){
	long long j=nb,sum=1;
	for(int i=1;i<=na;i++){
		while(j>=1&&(__int128)ca[i]*cb[j]>x){
			j--;
		}sum+=j;
	}return sum>k;
}int main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
    	scanf("%lld",&a[i]);
	}scanf("%lld",&k);
	sort(a+1,a+n+1);
	dfs(1,1);
	dfs1(2,1);
	sort(ca+1,ca+na+1);
	sort(cb+1,cb+nb+1);
	na=unique(ca+1,ca+na+1)-ca-1,nb=unique(cb+1,cb+nb+1)-cb-1;
	while(l<r){
		long long mid=(l+r)/2;
		if(check(mid)){
			r=mid;
		}else{
			l=mid+1;
		}
	}printf("%lld",r);
    return 0;
}
2024/5/4 20:38
加载中...