CF 50E. Square Equation Roots

思路:这题的关键就是重复根只可能是整数。

这样先求出所有的根的数目,在减去重复的根。

代码如下:

 

 1 #include <iostream>

 2 #include <cstring>

 3 #include <cstdio>

 4 #include <cmath>

 5 #define ll long long

 6 using namespace std;

 7 bool f[6000005];

 8 int main(){

 9     ll n,m;

10     scanf("%I64d%I64d",&n,&m);

11     ll ans=0;

12     memset(f,0,sizeof(f));

13     for(ll b=1;b<=n;b++){

14         ans+=min(2*m,b*b*2);

15         ll b2=b*b;

16         for(ll c=b-1;c>=0;c--){

17             if(b2-c*c>m) break;

18             if(f[b-c]) ans--;

19             else f[b-c]=1;

20             if(f[b+c]) ans--;

21             else f[b+c]=1;

22         }

23     }

24     printf("%I64d\n",ans);

25     return 0;

26 }
View Code

 

 

 

你可能感兴趣的:(root)