CF50E

· · 个人记录

大意

b = 1 \rightarrow n \,,\, c = 1 \rightarrow m 时方程 x^2 + 2bx + c = 0 的实根数(重根按 1 个算)。

思路

首先 x = \frac{-2b \pm \sqrt{4b^2-4c}}{2} = -b \pm \sqrt{b^2-c} 。枚举 b ,则对于 1 \leq c \leq \lfloor \sqrt{b} \rfloor ,都有两个解。

显然,会有重解的情况存在。如果 \sqrt{b^2-c} 是无理数,那么无论如何都不会算重。那么我们讨论 \sqrt{b^2+c} 是整数的情况。

(我忘了我推出的是什么,草稿纸不见了)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans;
signed main(){
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;i++){
        if(i*i>m) ans+=m*2;
        else ans+=i*i*2-1;
    }
    for(int i=1;i<=m/2&&i<n*2;i++){
        int r=n-i/2,t;
        if(i&1) t=(m+i)/(i*2);
        else t=m/(i*2);
        ans-=min(r,t)-1;
    }
    printf("%lld",ans);
    return 0;
}