2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) Goblin Garden Guards (数论)

来源:互联网 发布:淘宝评分 编辑:程序博客网 时间:2024/06/05 02:22

题目大意:在第一象限内存在着n个黑点,然后同时存在着圆,求出不在圆内的个数

解题思路:本来这道题在数据很小的时候可以暴力去判,但是发现这个数据太大,所以需要进行优化和处理,我们枚举每个圆,找出这个圆作为内切圆的正方形,然后枚举在正方形内是否有黑点且黑点在圆内

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <cmath>#include <cstdlib>#include <ctime>using namespace std;typedef long long LL;struct point{int x,y;}p[100005];bool tu[10002][10002];int cnt;void check(int rr,int x,int y,int l,int r,int u,int d){for(int i=l;i<=r;i++){for(int j=d;j<=u;j++){if(abs(x-i)*abs(x-i)+abs(y-j)*abs(y-j)<=rr*rr)tu[i][j]=1;}}}int main(){int n,x,y,rr,T,i,l,r,u,d;cin>>n;cnt=0;for(i=1;i<=n;i++){cin>>p[i].x>>p[i].y;}cin>>T;while(T--){cin>>x>>y>>rr;l=max(0,x-rr);r=min(10000,x+rr);u=min(10000,y+rr);d=max(0,y-rr);check(rr,x,y,l,r,u,d);}for(i=1;i<=n;i++){if(tu[p[i].x][p[i].y]==0)cnt++;}cout<<cnt<<endl;return 0;}


阅读全文
0 0
原创粉丝点击