bzoj3748 Kwadraty

Posted on 2018-04-20 14:41  Amphetamine  阅读(184)  评论(0编辑  收藏  举报

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不能被凑出,而这些数就是超重的数。