码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj3748 Kwadraty

时间:2018-04-20 16:03:00      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:如何   image   情况   bzoj   style   info   dal   天才   存在   

Claris 当然是要用来%的

但是,,其他dalao,,比如JL的红太阳commonc。题解能不能稍微加几句话,蒟蒻看不懂啊。

 

在这里解释一下,Claris的题解。(因为我弱,想了半天才明白,所以觉得有必要写一下

技术分享图片

 

 

首先,表是怎么打的?

1e18,暴力吗?

对于小范围打表

设f(x)=12+22+....+x2=x*(x+1)*(2x+1)/6

找到一个t使得 f(t-1)+1<=n<=f(t)

设F(n)=a12+a22+...=n 就是n可以由a1,a2等不同整数的平方凑出,且最大的数最小。

则 F(n)=f(t)-F(f(t)-n)

所以只要f(t)-n能凑出来,n也一定能凑出来。

同理对于任意正整数k 当0<=f(k)-n<n 能被凑出来时,n就可以被凑出来。

设当前为止最大不能被凑出来的数是maxn

只要能找到k使得 maxn<f(k)-n<n即可

如何证明当n较大时不存在凑不出的情况呢?

当n较大时 n<f(t)<f(t+1)<2*n

所以只要(t+1)的平方大于maxn就可以说明之后所有的n都能被凑出,且最大的数最小为t或t+1

 

通过打表发现,maxn=128,当t>=11的时候n一定会被凑出。

f(11)=506 这就是506的来历。

所以凑出n就可以二分找出t然后判断f(t)-n能否被凑出。

 

对于第二问。

可以发现,对于一串数,f(t)是相同的,这一串数中较小的128个中一定会有31个数x使得f(t)-x不能被凑出,而这些数就是超重的数。

 

bzoj3748 Kwadraty

标签:如何   image   情况   bzoj   style   info   dal   天才   存在   

原文地址:https://www.cnblogs.com/Amphetamine/p/8890838.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!