题解:SP34007 ADAM1 - Adrita and Marbles
题目大意
在二维平面内,给出一个圆的方程和若干个点,求出在圆内或圆上的点的数量。
解题思路
大部分人好像都是用的小数,可是为什么不能用整数呢?
这里根据式子
根据《高中数学选择性必修一》相关内容,方程
所以原方程可以变成:
这个方程可以表示一个圆心在点
点满足条件需要点与圆心的距离小于等于半径,也就是满足:
等效于满足:
同乘
这样就绝对不会有浮点误差了。
(其实就是
AC Code
#include<bits/stdc++.h>
#define code using
#define by namespace
#define zwz std
code by zwz;
#define ll long long
void solve() {
ll n;
ll p,q,z;
ll x,y;
ll ans=0;
cin>>p>>q>>z>>n;
for(int i=1;i<=n;i++){
cin>>x>>y;
if(pow(2*x-p,2)+pow(2*y-q,2)<=p*p+q*q-4*z)ans++;
}
cout<<ans<<"\n";
}
int main() {
int t;
cin>>t;
while(t--){
solve();
}
}