专栏文章

题解:AT_abc413_c [ABC413C] Large Queue

AT_abc413_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioz4a4z
此快照首次捕获于
2025/12/03 03:31
3 个月前
此快照最后确认于
2025/12/03 03:31
3 个月前
查看原文

解题思路:

这道题一共有两个操作:
1 往队列尾加 kkxx
2 删除队列前 kk 个数并输出它们的和。
对于操作 1 ,我们只需要记两个数组,分别记下 xx 的值,和 xx 的个数。
对于操作 2 ,我们可以用一个变量 idid ,来记下删除的最后一个数的下标,这样就不用真正地删除了。对于输出,直接便利输出就行了。

AC代码:

CPP
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int q,a[1000001],cnt,st,sum[200001],kua[200001],num[200001];//这边其实2个就行了 
signed main() {
	cin>>q;
	while(q--) {
		int op,x,y;
		cin>>op>>x;
		if(op==1) {
			cin>>y;
			kua[++cnt]=y;
			num[cnt]=x;
			sum[cnt]=x*y;
		} else {
			int i=st+1;
			int ans=0;
			for(i=st+1; x>=num[i]&&i<=cnt; i++)ans+=sum[i],x-=num[i];
			st=i-1;
			if(i<=cnt){
			num[i]-=x;
			sum[i]=num[i]*kua[i];
			ans=ans+x*kua[i];
		}
			cout<<ans<<"\n";
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...