D. Gadgets for dollars and pounds
题解
1.如果限定在
2.如果要买
3.优先买 单价x汇率 最低的那个
code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N = 114514;
ll n, m, k, s;
ll a[2 * N], b[2 * N];
struct unit {
ll id, val;
bool operator < (const unit &other) const {
return val < other.val;
}
};
vector<unit> dollar, pounds;
struct node {
ll id, day;
} ans[2 * N];
struct {
ll day, val;
} prea[2 * N], preb[2 * N];
bool check(ll x) {
ll it1 = 0, it2 = 0;
ll sum = 0;
for (ll i = 1; i <= k; i++) {
if (it1 < dollar.size() && it2 < pounds.size()) {
if (dollar[it1].val * prea[x].val < pounds[it2].val * preb[x].val) {
sum += dollar[it1].val * prea[x].val;
it1++;
} else {
sum += pounds[it2].val * preb[x].val;
it2++;
}
} else if (it1 < dollar.size()) {
sum += dollar[it1].val * prea[x].val;
it1++;
} else {
sum += pounds[it2].val * preb[x].val;
it2++;
}
}
return sum <= s;
}
void build(ll x) {
ll it1 = 0, it2 = 0;
for (ll i = 1; i <= k; i++) {
if (it1 < dollar.size() && it2 < pounds.size()) {
if (dollar[it1].val * prea[x].val < pounds[it2].val * preb[x].val) {
ans[i].id = dollar[it1].id;
ans[i].day = prea[x].day;
it1++;
} else {
ans[i].id = pounds[it2].id;
ans[i].day = preb[x].day;
it2++;
}
} else if (it1 < dollar.size()) {
ans[i].id = dollar[it1].id;
ans[i].day = prea[x].day;
it1++;
} else {
ans[i].id = pounds[it2].id;
ans[i].day = preb[x].day;
it2++;
}
}
}
void solve() {
cin >> n >> m >> k >> s;
for (ll i = 1; i <= n; i++) cin >> a[i];
for (ll i = 1; i <= n; i++) cin >> b[i];
for (ll i = 1; i <= m; i++) {
ll type, val;
cin >> type >> val;
if (type == 1) dollar.push_back({i, val});
else pounds.push_back({i, val});
}
sort(dollar.begin(), dollar.end());
sort(pounds.begin(), pounds.end());
prea[0].val = 2e9;
prea[0].day = -1;
preb[0].val = 2e9;
preb[0].day = -1;
for (ll i = 1; i <= n; i++) {
prea[i].val = prea[i - 1].val;
prea[i].day = prea[i - 1].day;
preb[i].val = preb[i - 1].val;
preb[i].day = preb[i - 1].day;
if (a[i] < prea[i - 1].val) {
prea[i].val = a[i];
prea[i].day = i;
}
if (b[i] < preb[i - 1].val) {
preb[i].val = b[i];
preb[i].day = i;
}
}
ll l = 0, r = n + 1;
while (l + 1 < r) {
ll mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
if (r == n + 1) cout << "-1\n";
else {
cout << r << '\n';
build(r);
for (ll i = 1; i <= k; i++) cout << ans[i].id << ' ' << ans[i].day << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll t = 1;
while (t--) solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~