QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#226373#6632. Minimize MedianxuxubaobaoTL 0ms0kbC++171.3kb2023-10-25 21:39:062023-10-25 21:39:06

Judging History

你现在查看的是最新测评结果

  • [2023-10-25 21:39:06]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-10-25 21:39:06]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
using PII = pair<int,int>;
using ll = long long;

constexpr int N = 2e6 + 10;

ll w[N];
ll c[N];
int n, m, k;

bool check(ll u) {
	ll cur = 0;
	if(u == 0) {
		for(int i = 1; i <= n / 2 + 1; i ++) {
			cur += c[w[i] + 1];
		}
	}
	else {
		for(int i = 1; i <= n / 2 + 1; i ++) {
			cur += c[(w[i] + u - 1) / u];
		}
	}
	return cur <= k;
}

void solve() {
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i ++) {
		cin >> w[i];
	}
	for(int i = 1; i <= m; i ++) c[i] = 1 << 29;
	for(int i = 1; i <= m; i ++) {
		cin >> c[i];
	}
	for(int i = 1; i <= m; i ++) {
		for(int j = 1; i * j <= m; j ++) {
			c[i * j] = min(c[i * j], c[i] + c[j]);
		}
	}
	for(int i = m; i >= 1; i --) {
		c[i] = min(c[i], c[i + 1]);
	}
	int j = 1;
	for(int i = m; i >= i; i --) {
		while(i * j <= m) j ++;
		c[m + 1] = min(c[m + 1], c[i] + c[j]);
	}
	for(int i = m; i >= 1; i --) {
		c[i] = min(c[i], c[i + 1]);
	}
	sort(w + 1, w + 1 + n);
	ll l = 0, r = 1ll << 29;
	while(r > l) {
		ll mid = (l + r) >> 1;
		if(check(mid)) {
			r = mid;
		}
		else l = mid + 1;
	}
	cout << l << "\n";
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	t = 1;
	cin >> t;
	while(t --){
		solve();
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

3
3 5 0
2 5 2
3 2 4 6 13
3 5 3
2 5 3
3 2 4 6 13
3 5 6
2 5 2
3 2 4 6 13

output:


result: