多校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