UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#208030#3712. Seeker Templeshiruiheng10010668ms5880kbC++112.7kb2024-08-01 12:20:032024-08-01 12:46:47

answer

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
//using LL = __int128
#define pi pair<ll, ll>
#define M 22
#define N 7111111
ll n, p[M], k, mp[11];
ll tmp[N], tmp1[N], sz, sz1, t[N], pos;
void dfs(int l, int r, ll now, ll mid){
	tmp[++sz] = now;
	for(int i = l ; i <= r ; i++)
		if(now <= mid / p[i])
			dfs(i, r, now * p[i], mid);
}
void dfs1(int l, int r, ll now, ll mid){
	tmp1[++sz1] = now;
	for(int i = l ; i <= r ; i++)
		if(now <= mid / p[i])
			dfs1(i, r, now * p[i], mid);
}
void debug(ll mid, ll ans){
	cerr << mid << " " << sz << " " << sz1 << " " << ans << "\n";
	return;
	for(int i = 1 ; i <= sz ; i++)
		cout << tmp[i] << " \n"[i == sz];
	for(int i = 1 ; i <= sz1 ; i++)
		cout << tmp1[i] << " \n"[i == sz1];
}
void tr(){
	pos = 0;
	for(int i = 1 ; i <= sz ; i++)
		if(tmp[i] != tmp[i - 1])
			t[++pos] = tmp[i];
	sz = pos;
	for(int i = 1 ; i <= pos ; i++)
		tmp[i] = t[i];
}
void tr1(){
	pos = 0;
	for(int i = 1 ; i <= sz1 ; i++)
		if(tmp1[i] != tmp1[i - 1])
			t[++pos] = tmp1[i];
	sz1 = pos;
	for(int i = 1 ; i <= pos ; i++)
		tmp1[i] = t[i];
}
bool check(ll mid){
	ll ans = 0;
	sz = sz1 = 0;
	dfs(1, n / 2, 1, mid);
	dfs1(n / 2 + 1, n, 1, mid);
	//tr();
	//tr1();
	sort(tmp + 1, tmp + 1 + sz);
	sort(tmp1 + 1, tmp1 + 1 + sz1);
	tmp1[sz1 + 1] = mid + 1;
	ll l = sz, r = 1;
	while(l > 0){
		while(tmp[l] <= mid / tmp1[r])
			r++;
		ans += (r - 1);
		//if(mid == 111423952670820829)
		//cerr << l << " " << r << "\n";
		l--;
	}
	//debug(mid, ans);
	return ans >= k;
}
unordered_map<ll, bool> vis;
priority_queue<ll, vector<ll>, greater<ll>> q;

int main(){
	mp[1] = 1;
	mp[0] = -1;
	scanf("%lld", &n);
	for(int i = 1 ; i <= n ; i++){
		scanf("%lld", &p[i]);
	}
	sort(p + 1, p + 1 + n);
	for(int i = 2 ; 2 * i <= n ; i += 2)
		swap(p[i], p[n + 2 - i]);
	//for(int i = 1 ; i <= n ; i++)
		//cout << p[i] << " \n"[i == n];
	ll l = 1, r = 1, ans = 0;
	for(int i = 1 ; i <= 18 ; i++)
		r *= 10;
	scanf("%lld", &k);
	if(k <= -1000000){
		q.push(1);
		ll cnt = 0, u = 0;
		while(cnt < k){
			u = q.top();
			q.pop();
			/*
			if(vis.size() > lim){
				cerr << u << " ";
				clear();
				cerr << vis.size() << " moo\n";
			}
			//*/
			//if(vis.size() % 1000000 == 0)
				//cerr << vis.size() << " " << u << " " << cnt << " moo\n";
			for(int i = 1 ; i <= n ; i++)
				if(u <= r / p[i])
					if(!vis[u * p[i]])
						q.push(u * p[i]), vis[u * p[i]] = true;
			cnt++;
		}
		cout << u;
		return 0;
	}
	if(check(r) && !check(r - 1)){
		printf("%lld", r);
		return 0;
	}
	while(l <= r){
		ll mid = (l + r) >> 1;
		if(check(mid)){
			ans = mid, r = mid - 1;
		}
		else
			l = mid + 1;
	}
	printf("%lld", ans);
	return 0;
}

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 503ms
memory: 5320kb

input:

16
2 5 7 17 23 29 31 41 43 47 59 61 67 71 89 97
4177

output:

185150

result:

ok 1 number(s): "185150"

Test #2:

score: 10
Accepted
time: 174ms
memory: 2752kb

input:

16
5 13 17 19 23 37 41 43 53 59 61 67 71 73 83 97
1136

output:

152693

result:

ok 1 number(s): "152693"

Test #3:

score: 10
Accepted
time: 360ms
memory: 4120kb

input:

15
2 5 7 11 13 29 31 37 47 53 59 61 71 79 89
27760

output:

9506336

result:

ok 1 number(s): "9506336"

Test #4:

score: 10
Accepted
time: 334ms
memory: 4048kb

input:

16
3 7 11 17 19 23 29 37 41 43 59 61 67 71 79 83
15513

output:

9046527

result:

ok 1 number(s): "9046527"

Test #5:

score: 10
Accepted
time: 7ms
memory: 1288kb

input:

8
7 31 53 59 61 67 73 79
33053

output:

8263273940946857

result:

ok 1 number(s): "8263273940946857"

Test #6:

score: 10
Accepted
time: 11ms
memory: 1280kb

input:

8
13 29 37 41 47 61 73 79
66707

output:

904399311706295197

result:

ok 1 number(s): "904399311706295197"

Test #7:

score: 10
Accepted
time: 18ms
memory: 1292kb

input:

7
3 5 11 17 59 61 79
209466

output:

904010601099684375

result:

ok 1 number(s): "904010601099684375"

Test #8:

score: 10
Accepted
time: 3009ms
memory: 4960kb

input:

15
2 3 5 7 13 19 29 43 59 71 73 79 83 89 97
140325038

output:

984828581062759296

result:

ok 1 number(s): "984828581062759296"

Test #9:

score: 10
Accepted
time: 2837ms
memory: 4948kb

input:

16
2 5 7 17 19 41 43 47 53 59 61 67 73 79 83 89
79756884

output:

992695529294818384

result:

ok 1 number(s): "992695529294818384"

Test #10:

score: 10
Accepted
time: 3415ms
memory: 5880kb

input:

15
2 3 5 7 11 17 23 29 43 47 59 73 79 83 89
198534643

output:

921655390703146000

result:

ok 1 number(s): "921655390703146000"