Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
27925 | A21μΘ_wjy | 【BJ】T1 | C++ | 运行超时 | 39 | 3000 MS | 9176 KB | 2267 | 2024-03-31 14:30:01 |
#include<bits/stdc++.h> #define int long long #define doub long double using namespace std; const int maxn=1e3+7; const doub eps=1e-6; vector<int> E[maxn]; bool vis[maxn]; int n,m; int xr[maxn]; int yr[maxn]; int xh[maxn]; int yh[maxn]; int rh[maxn]; bool dc(int ci,int pi,int pj){ int r=rh[ci]; int xz=xh[ci]; int yz=yh[ci]; int xi=xr[pi]; int xj=xr[pj]; int yi=yr[pi]; int yj=yr[pj]; if(xi==xj){ if(r*r-(xi-xz)*(xi-xz)<-eps)return 0; doub yf=yz-sqrt(r*r-(xi-xz)*(xi-xz)); doub ys=yz+sqrt(r*r-(xi-xz)*(xi-xz)); if(yf-min(yi,yj)>=eps&&yf-max(yi,yj)<=-eps)return 1; if(ys-min(yi,yj)>=eps&&ys-max(yi,yj)<=-eps)return 1; return 0; } doub k=1.0*(yj-yi)/(xj-xi); doub t=1.0*(xj*yi-xi*yj)/(xj-xi); //cout<<pi<<" "<<pj<<endl; //cout<<"the line: "<<k<<"x+"<<t<<endl; doub a=(k*k+1)*1.0; doub b=(-2*xz+2*k*t-2*yz*k)*1.0; doub c=(xz*xz+(t-yz)*(t-yz)-r*r)*1.0; //cout<<a<<" "<<b<<" "<<c<<endl; if(b*b-4*a*c<-eps)return 0; doub t1=(-b+sqrt(b*b-4*a*c))/(2*a); doub t2=(-b-sqrt(b*b-4*a*c))/(2*a); if(t1-min(xi,xj)>=eps&&t1-max(xi,xj)<=-eps)return 1; if(t2-min(xi,xj)>=eps&&t2-max(xi,xj)<=-eps)return 1; return 0; } void dfs(int u){ vis[u]=true; for(int i=0;i<E[u].size();i++){ int v=E[u][i]; if(!vis[v])dfs(v); } } signed main(){ // freopen("beacons.in","r",stdin); // freopen("beacons.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++){ int x,y; cin>>x>>y; xr[i]=x; yr[i]=y; } for(int i=1;i<=m;i++){ int x,y,r; cin>>x>>y>>r; xh[i]=x; yh[i]=y; rh[i]=r; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ bool b=false; for(int k=1;k<=m;k++){ //cout<<i<<" "<<j<<" "<<k<<endl<<dc(k,i,j)<<endl; b|=dc(k,i,j); } if(!b){ E[i].push_back(j); E[j].push_back(i); } } } int cnt=0; for(int i=1;i<=n;i++){ if(!vis[i])dfs(i),cnt++; } cout<<cnt-1<<endl; return 0; }