CodeForces - 1266E Spaceship Solitaire(思维)
题目大意
一共需要n种物资,每个物资\(a_i\)个。还可以使用加速器,当产出t个s产品之后会奖励一个u产品,奖励一次之后就不会再奖励了,并且奖励的产品也会算进产出里然后使用其他的加速器。
解题思路
因为一次只会产生一种奖励,并且奖励还可以产生连锁反应,所以使用一次加速器,要么会使结果减1,要么不变,要么就加1。
代码
const int maxn = 2e5+10;
const int maxm = 2e5+10;
map<P, int> mp;
int arr[maxn];
int main() {
int n; cin >> n;
ll ans = 0;
for (int i = 1; i<=n; ++i) cin >> arr[i], ans += arr[i];
int q; cin >> q;
int s, t, u;
while(q--) {
scanf("%d%d%d", &s, &t, &u);
int v = mp[{s, t}];
if (v) {
++arr[v];
if (arr[v]>0) ++ans;
}
mp[{s, t}] = u;
if (arr[u]>0) --ans;
--arr[u];
printf("%lld\n", ans);
}
return 0;
}