崩,看半天没错,然后样例一个没过
#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;
}