CF521D Shop
注意到选定的操作数可以少于
假设我们框定了选择的操作集合,如何决定顺序?
先做所有赋值操作,再做所有加操作,再做所有乘操作是最优的,而每种类型操作内部的顺序无所谓。
对每个数而言,只进行一次赋值操作就行了。那么对每个数只需要保留对其赋的值最大的那个操作。这样以来,对每个数的赋值都是相对于原数而言的,那么可以直接转换成对第
现在变成只有加和乘的操作了。
假设我们给第
这样以来,对每个数的加法操作,也是相对于对这个原数再进行了比这个加法操作加的更多的所有加法操作后的数(不妨设为
最后只有乘操作,选择乘操作的前
注意到加法转乘法中可能会出现分数。观察
或者按照
为什么赋值不能直接转乘法?
刚刚已经推得一定存在一个最优解使得每个变量都是被按照先赋值,再加,最后乘来操作的。赋值转加法,就会变成先加,再加,最后乘,很明显前两步可以合并;而赋值转乘法会变成先乘,再加,最后乘,这就没法处理了。
/*
* @Author: crab-in-the-northeast
* @Date: 2023-04-30 20:08:14
* @Last Modified by: crab-in-the-northeast
* @Last Modified time: 2023-04-30 20:27:31
*/
#include <bits/stdc++.h>
#define int long long
inline int read() {
int x = 0;
bool f = true;
char ch = getchar();
for (; !isdigit(ch); ch = getchar())
if (ch == '-')
f = false;
for (; isdigit(ch); ch = getchar())
x = (x << 1) + (x << 3) + ch - '0';
return f ? x : (~(x - 1));
}
const int maxk = (int)1e5 + 5;
const int maxn = (int)1e5 + 5;
typedef std :: pair <int, int> pii;
int a[maxk], tp[maxn];
pii asi[maxk];
struct node {
int id, x, p, q;
bool operator < (node b) {
return p * b.q > b.p * q;
}
};
signed main() {
int k = read(), n = read(), m = read();
std :: vector <node> add, mul;
for (int i = 1; i <= k; ++i)
a[i] = read();
for (int i = 1; i <= n; ++i) {
int t = read(), x = read(), v = read();
tp[i] = t;
if (t == 1)
asi[x] = std :: max(asi[x], std :: make_pair(v, i));
else if (t == 2)
add.push_back({i, x, v, 1});
else
mul.push_back({i, x, v - 1, 1});
}
for (int i = 1; i <= k; ++i)
if (asi[i].first > a[i])
add.push_back({asi[i].second, i, asi[i].first - a[i], 1});
std :: sort(add.begin(), add.end());
for (node o : add) {
int id = o.id, x = o.x, p = o.p;
mul.push_back({id, x, p, a[x]});
a[x] += p;
}
std :: sort(mul.begin(), mul.end());
m = std :: min(m, (int)mul.size());
std :: sort(mul.begin(), mul.begin() + m, [](node a, node b) {
return tp[a.id] < tp[b.id];
});
printf("%lld\n", m);
for (int i = 0; i < m; ++i)
printf("%lld ", mul[i].id);
puts("");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】