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 }