社区讨论

萌新请教为什么队列数组每次要全清

P3800Power 收集参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@lo7txvkx
此快照首次捕获于
2023/10/27 07:42
2 年前
此快照最后确认于
2023/10/27 07:42
2 年前
查看原帖
第一个问题:
WA 60pts:
CPP
for(int i=1;i<=n;++i)
{
	q[1]=0;           //<=here(只清首项)
	l=0,r=1;
	d^=1;
	for(int j=1;j<=T;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
	}
	for(int j=T+1;j<=m;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
	for(int j=m+1;j<=m+T;++j)
	{
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
}
AC:
CPP
for(int i=1;i<=n;++i)
{
	memset(q,0,sizeof(q));//<=here(全部清空)
	l=0,r=1;
	d^=1;
	for(int j=1;j<=T;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
	}
	for(int j=T+1;j<=m;++j)
	{
		while(r>=l&&f[d^1][q[r]]<=f[d^1][j]) --r;
		q[++r]=j;
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
	for(int j=m+1;j<=m+T;++j)
	{
		if(q[l]+2*T<j) ++l;
		f[d][j-T]=f[d^1][q[l]]+val[i][j-T];
	}
}
why? qwq
第二个问题:
经推算这份代码在T>m时可能ub,但为什么没寄?

回复

4 条回复,欢迎继续交流。

正在加载回复...