其他分享
首页 > 其他分享> > 多校11

多校11

作者:互联网

220(70+100+20+30) rank 53

T2:大模拟,而且相当简单....

T1:数论,质因子

T3:思维题+高水平暴力水高分

T4:

T3:给你n个数对(a,b),如果确定一种排列顺序,那么第i位的val值=max(val(i-1),sum_a[i])+b(i).求一种排列顺序,使得最大的val值最小

容易知道最大的val就是在最后一位,考虑构造一种方案,对于N=2,如果(a,b)(c,d)的顺序使得最大值更小,当而且仅仅当min(a,c)<min(b,c) [分类讨论一下就好,很容易证明]。那么进行推广,对于任意的n,只要按照这种顺序排队,那最后一定是一种最优解

思路纠正:我之前是只片面考虑了每两对数字之间,从前向后扫,有使得一个局部解更小的就换,但是首先因为序列在改变,所以前面换掉的更优可能被覆盖,其次局部更小对全局不一定,如果只从一个随机的顺序开始,很难弄出最优解,但是对于确定的序列,ans=sigma(sum_a[i]+sum_b[i])是对的(a前缀,b后缀)

部分分(1)当a=b,让第一个ai是最小的就行,因为上面的式子,自己画一个答案选集矩阵(2)当b=a+1,按照a升序是答案,考虑任意一对,如果交换,只可能答案不变或者答案增加,所以一定会更不优

c[i+4]=
ai+ bi +b[i+1]+b[i+2]+b[i+3]+b[i+4]
ai+a[i+1]+b[i+1]+b[i+2]+b[i+3]+b[i+4]
ai+a[i+1]+a[i+2]+b[i+2]+b[i+3]+b[i+4]
ai+a[i+1]+a[i+2]+a[i+3]+b[i+3]+b[i+4]
ai+a[i+1]+a[i+2]+a[i+3]+a[i+4]+b[i+4]

(3)DP也可以

int prime[1000000+100];ll l,r;
int zhi[1000000+100],cnt;
int bj=0;
inline void Prime()
{
	for(rint i=2;i<=bj;++i)
	{
		if(!prime[i])zhi[++cnt]=i,mi[i]=i;
		_f(j,1,cnt)
		{
			ll my=zhi[j]*i;
			if(my>(ll)r)break;
			prime[my]=1;
			mi[my]=zhi[j];
			if(!(i%zhi[j]))break;
		}
	}
}
int main()
{
	scanf("%lld%lld",&l,&r);
	bj=sqrt(r);
	Prime();
	for(ll i=l;i<=r;++i)
	{
		if(mi[i])
		{
			chu("%d\n",mi[i]);
		}
		else chu("%lld\n",i);
	}


	return 0;
}

标签:11,val,ai,sum,多校,int,zhi,100
来源: https://www.cnblogs.com/403caorong/p/16572438.html