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;
} 

posted @ 2021-02-27 22:36  shuitiangong  阅读(83)  评论(0编辑  收藏  举报