WA on case5
  • 板块CF912E Prime Gift
  • 楼主ZepX_D
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/24 17:53
  • 上次更新2024/4/24 18:14:29
查看原帖
WA on case5
464004
ZepX_D楼主2024/4/24 17:53
#include <bits/stdc++.h>
#define pb push_back
#define LL long long

using namespace std;

struct node{int p;bool f;}a[20];
int n,siz;
vector < LL > v1,v2;

void D1(int pos,int ed,LL k)
{
	v1.insert(lower_bound(begin(v1),end(v1),k),k);
	while(v1.size() > siz) v1.pop_back();
	for (int i = pos;i <= ed && a[i].p <= 1e18/k;i++)
		D1(i,ed,k*a[i].p);
}

void D2(int pos,int ed,LL k)
{
	v2.insert(lower_bound(begin(v2),end(v2),k),k);
	while(v2.size() > siz) v2.pop_back();
	for (int i = pos;i <= ed && a[i].p <= 1e18/k;i++)
		D2(i,ed,k*a[i].p);
}

bool cmp(node a,node b)
{return a.f == b.f ? a.p < b.p : a.f < b.f;}

bool check(LL k)
{
	LL res = 0;int j = v2.size()-1;
	for (LL i : v1)
	{
		if(i > k) break;
		while(j >= 0 && v2[j] > k/i) j--;
		res += (j+1);
	}
	return res >= siz;
}

int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++) cin >> a[i].p;
	sort(a+1,a+n+1,cmp);
	for (int i = 1;i <= n;i++) a[i].f = i&1;
	sort(a+1,a+n+1,cmp);
	cin >> siz;
	int mid = (1+n)>>1;
	D1(1,mid,1);D2(mid+1,n,1);
	LL l = 1,r = 1e18;
	while(l < r)
	{
		LL mid = (l+r)>>1;
		if(check(mid)) r = mid;
		else l = mid+1;
	}
	cout << l;
	return 0;
}
2024/4/24 17:53
加载中...