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

 

 

 

posted @ 2013-10-03 09:43  _随心所欲_  阅读(157)  评论(0编辑  收藏  举报