• bzoj3748 Kwadraty


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

  • 相关阅读:
    java 笔记(6) static关键字
    java 笔记(5)接口,static
    java 笔记(4)抽象类与抽象方法
    java 笔记(3)多态 容易理解
    看穿CSS的定位技术
    揭开浮动布局的秘密(简略版)
    不可不知的CSS盒子模型(简略版)
    初学Java web 项目
    Eclipse快捷键
    JDBC连接数据库
  • 原文地址:https://www.cnblogs.com/Amphetamine/p/8890838.html
Copyright © 2020-2023  润新知