题解

2 条题解

  • 1
    @ 2014-09-03 22:40:57

    要在sqrt(n)的时间内解决这个问题,我们需要较强的数学分析能力。让我们把实数解分成三个部分。设使Δ>=0的(b,c)有ans1对,使sqrt(b^2-c)为整数的(b,c)有ans2对,最后能够得到的整数解有ans3个,那么最终的答案ans = ans1 * 2 - ans2 * 2 + ans3。
    我们分情况讨论它们的求法。
    1、ans1, 我们只需使b^2-c >= 0即可。枚举b,当b^2<m时,ans1 += b^2, 当b^2 >m, ans1 += m
    这样可以sqrt(m)的时间内求出ans1。
    2、ans2,设b^2-c = x^2,则(b - x)*(b + x) = c,令b-x = x1, b + x = x2
    有2 <= x1 + x2 <= 2*n, x1*x2 <= m, 我们枚举x1,则x2 <= min(m / x1, 2*n - x1)。统计[x1,x2]区间内与x1同奇偶的数即可。注意x1 <= x2 <= sqrt(m),所以也在根号的时间内解决了。
    3、ans3,这个比较难想到,我们将能够得到的整数解分成两部分,一部分是奇数,一部分是偶数。
    考虑这个式子:-b - sqrt(b^2-c),
    当b^2 - (b - 1)^2 = 2b - 1 <= m时,能取到-2b+1的奇数整数解。
    当b^2 - (b-2)^2 = 4b - 4 <= m时,能取到-2b+2的偶数整数解。
    可以证明,这样取到的整数就等价于由方程能够解出的整数。所以可以O(1)的计算出来。

    至此,这个问题得到解决。对于ans3的计算感觉更多依赖于猜想,在考试中打表观察规律即可比较快的发现。
    从数学慢慢推广 从数据范围看出简单算法 这样才能在OI届大展风采~
    PS 目测此题好难 但是比赛的时候30分非常简单的

  • -1
    @ 2012-11-02 15:48:32

    foo.pas(10,14) Warning: Variable "ans" does not seem to be initialized 

    #01: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #02: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #03: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #04: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #05: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #06: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #07: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #08: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #09: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    #10: ---|---|---|---|---|---|---|---|-

    Accepted (0ms, 580KB) 

    ---|---|---|---|---|---|---|---|-

    Accepted / 100 / 0ms / 580KB 

    在我校RGB123RGB(洪*蓝)的带领下终于会了此题并且AC了。

    RBG123RBG说这是一道难度为2的题目……瞎爆狗眼,膜拜之膜拜之

  • 1

信息

ID
1759
难度
8
分类
(无)
标签
(无)
递交数
94
已通过
8
通过率
9%
被复制
2
上传者