#include <bits/stdc++.h>
using namespace std;
int n, m, t;
long long p, s[103], r[103];
vector<int> g[10004], visited, assigned;
bool visit(int u) {
if (visited[u] != t) visited[u] = t; else return false;
for (int v:g[u])
if (!assigned[v] || visit(assigned[v])) {
assigned[v] = u;
return true;
}
return false;
}
bool check(long long d) {
for (int i = 1; i <= m; i++) g[i].resize(0);
int nn = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (r[1] + s[i] * j - 1 <= d) {
nn++;
for (int k = 1; k <= m; k++)
if (r[k] + s[i] * j - 1 <= d) g[k].push_back(nn);
else break;
} else break;
visited.assign(m + 2, 0);
assigned.assign(nn + 2, 0);
t = 0;
int res = 0;
for (int i = 1; i <= m; i++) {
t++;
res += visit(i);
}
return (res >= m);
}
long long bina() {
long long l = 0, r = 1000000000000015, res;
while (l <= r) {
long long m = (l + r) >> 1;
if (check(m)) {
res = m;
r = m - 1;
} else l = m + 1;
}
return res;
}
int main() {
freopen("BUDGET.INP", "r", stdin);
freopen("BUDGET.OUT", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> p;
for (int i = 1; i <= n; i++) {
cin >> s[i];
s[i] = (p / s[i]) + int(p % s[i] > 0);
}
for (int i = 1; i <= m; i++) cin >> r[i];
sort(r + 1, r + m + 1);
cout << bina();
}
* Chuyên dạy lập trình ONLINE cho học sinh THCS, THPT *.
Mọi giao lưu, trao đổi, xin liên hệ: Lê Quang Vinh - zalo: 037.803.8755.
Page: Lớp học Code Sky
Group FB1: Ôn thi HSG9 - THTB - TS10 chuyên tin
Group FB2: Học Scratch - Ôn thi Tin học trẻ bảng A
Thứ Năm, 5 tháng 1, 2023
budget c++
Đăng ký:
Đăng Nhận xét (Atom)
Không có nhận xét nào:
Đăng nhận xét
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.