组队赛-13

G-goblin garden guards

题目里半径最大才100,所以40000比100000小得多,就还是采用了最开始的想法。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int st[10010][10010];
double getdis(int a,int b,int x,int y)
{
    double dis=sqrt(1.0*(a-x)*(a-x)+1.0*(b-y)*(b-y));
    return dis;
}
//struct node
//{
//    int x,y;
//}gl[N];
signed main()
{
    int g;
    cin>>g;
    for (int i=0;i<g;i++)
    {
        int x,y;
        cin>>x>>y;
        st[x][y]++;//地精能在同一位置,所以要计数,而不是开bool
    }
    int m;
    cin>>m;
    int ans=g;
    for (int i=0;i<m;i++)
    {
        int a,b,r;
        cin>>a>>b>>r;
        int num1=max(0,a-r);
        int num2=max(0,b-r);
        int num3=min(10000,a+r);
        int num4=min(10000,b+r);
        for (int j=num1;j<=num3;j++)
        {
            for (int k=num2;k<=num4;k++)
            {
                if (st[j][k]&&getdis(a,b,j,k)<=r)
                {
                    ans-=st[j][k];
                    st[j][k]=0;
                }
            }
        }
    }
    printf("%d\n",ans);
    return 0;
}

 

posted @ 2022-05-16 00:52  好腻友Π  阅读(25)  评论(0)    收藏  举报