社区讨论

近视后人 WA on #12 #13

P7811[JRKSJ R2] 你的名字。参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mjvl75x1
此快照首次捕获于
2026/01/01 23:15
2 个月前
此快照最后确认于
2026/01/04 18:15
2 个月前
查看原帖
本错误来自 hhr
请检查解决小 kk 的函数是否写错。
以下是 hhr 的小 kk 函数
CPP
inline void solvek(long long k)
{
	memset(kuai,0x3f,sizeof(kuai));
	for(long long i=1;i<=n;i++) kuai[i/v]=min(kuai[i/v],a[i]%k);
	for(long long i=le[k];i<=ri[k];i++)
	{
		long long minn=2e9,L=q[i].l,R=q[i].r;
		if(L/v==R/v)
		{
			for(long long x=L;x<=R;x++) minn=min(minn,a[x]%k);
		}
		else
		{
			if(L%v!=0)
			{
				long long end=L/v*v+v;
				for(long long x=L;x<end&&x<=n;x++) minn=min(minn,a[x]%k);
			}
			for(long long x=L/v+1;x<R/v;x++) minn=min(minn,kuai[x]);
			if(R%v!=v-1&&R%v!=0)
			{
				long long start=R/v*v;
				for(long long x=start;x<=R;x++) minn=min(minn,a[x]%k);
			}
			else if(R%v==v-1) minn=min(minn,kuai[R/v]);
		}
		ans[q[i].id]=minn;
	}
}
而以下是正确的小 kk 函数
CPP
inline void solvek(long long k)
{
	memset(kuai,0x3f,sizeof(kuai));
	for(long long i=1;i<=n;i++) kuai[i/v]=min(kuai[i/v],a[i]%k);
	for(long long i=le[k];i<=ri[k];i++)
	{
        long long minn=2e9,L=q[i].l,R=q[i].r;
		if(L/v==R/v)
		{
			for(long long x=L;x<=R;x++) minn=min(minn,a[x]%k);
		}
		else
		{
			int Lp=L/v*v+v-1,Rp=R/v*v;
    		for(int i=L;i<=Lp;i++) minn=min(minn,a[i] % k);
    		for(int i=Rp;i<=R;i++) minn=min(minn,a[i] % k);
    		for(int i=L/v+1;i<R/v;i++) minn=min(minn,kuai[i]);
		}
		ans[q[i].id]=minn;
	}
}

回复

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

正在加载回复...