题目链接:https://nanti.jisuanke.com/t/28882
解题思路:单纯的判断点是否在圆内,一一遍历圆外切正方形内的点即可,注意,该题要建个结构体数组存每个地精的位置,再bool个map数组用来标记点是否在圆内,map数组不能用int否则会超内存。
1 #include<iostream> 2 using namespace std; 3 int n,m,ans; 4 bool map[10005][10005]; 5 int in(int x,int y) 6 { 7 if(x<0||x>10000||y<0||y>10000) 8 return 0; 9 else return 1; 10 } 11 struct node{ 12 int x,y; 13 }a[100005]; 14 int main() 15 { 16 cin>>n; 17 for(int i=0;i<n;i++) 18 { 19 cin>>a[i].x>>a[i].y; 20 map[a[i].x][a[i].y]=1; 21 } 22 cin>>m; 23 for(int i=0;i<m;i++) 24 { 25 int x,y,r; 26 cin>>x>>y>>r; 27 for(int j=x-r;j<=x+r;j++) 28 { 29 for(int k=y-r;k<=y+r;k++) 30 { 31 if(in(j,k)) 32 { 33 if((j-x)*(j-x)+(k-y)*(k-y)<=r*r) 34 map[j][k]=0; 35 } 36 } 37 } 38 } 39 ans=0; 40 for(int i=0;i<n;i++) 41 if(map[a[i].x][a[i].y]) 42 ans++; 43 cout<<ans<<endl; 44 return 0; 45 }