ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#208030 | #3712. Seeker Temple | shiruiheng | 100 | 10668ms | 5880kb | C++11 | 2.7kb | 2024-08-01 12:20:03 | 2024-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;
}
详细
小提示:点击横条可展开更详细的信息
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"