#include <bits/stdc++.h>
#define int long long
using namespace std;
const double pi=acos(-1);
struct circle{
  double x,y,r;
  double arc(double t1,double t2){
    return r*r*(t2-t1)/2+r*(x*(sin(t2)-sin(t1))-y*(cos(t2)-cos(t1)))/2;
  }
};
double acor(double a){
  if(a<0) a+=2*pi;
  if(a<0) a+=2*pi;
  if(a>=2*pi) a-=2*pi;
  if(a>=2*pi) a-=2*pi;
  return a;
}
int n,ans;
double S,S2,x[300],y[300],r[300];
vector<circle> c1,c;
double solve(int idx){
  c1.clear();
  c.clear();
  for(int i=0;i<n;i++){
    if(i!=idx) c1.push_back({x[i],y[i],r[i]});
  }
  int N=c1.size();
  for(int i=0;i<N;i++){
    bool chk=1;
    for(int j=0;j<N;j++){
      if(i==j) continue;
      if(hypot(c1[i].x-c1[j].x,c1[i].y-c1[j].y)<=c1[j].r-c1[i].r){
        chk=0;
        break;
      }
    }
    if(chk){
      c.push_back(c1[i]);
    }
  }
  N=c.size();
  vector<vector<pair<double,int>>> a(N);
  double A,d,am,ap,alpha,ret=0;
  for(int i=0;i<N;i++){
    for(int j=0;j<N;j++){
      if(i==j) continue;
      d=hypot(c[j].x-c[i].x,c[j].y-c[i].y);
      if(d>=c[i].r+c[j].r) continue;
      A=acor(atan2(c[j].y-c[i].y,c[j].x-c[i].x));
      alpha=acos((c[i].r*c[i].r+d*d-c[j].r*c[j].r)/(2*c[i].r*d));
      am=acor(A-alpha),ap=acor(A+alpha);
      if(am<=ap){
        a[i].push_back({am,-1});
        a[i].push_back({ap,1});
      }
      else{
        a[i].push_back({0,-1});
        a[i].push_back({ap,1});
        a[i].push_back({am,-1});
        a[i].push_back({2*pi,1});
      }
    }
    if(a[i].empty()){
      ret+=pi*c[i].r*c[i].r;
      continue;
    }
    a[i].push_back({2*pi,0});
    sort(a[i].begin(),a[i].end());
    int cnt=0;
    double prv=0;
    for(auto [X,D]:a[i]){
      if(cnt==0) ret+=c[i].arc(prv,X);
      cnt+=D;
      prv=X;
    }
  }
  return ret;
};
signed main(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin>>n;
  for(int i=0;i<n;i++) cin>>x[i]>>y[i]>>r[i];
  S=solve(-1);
  for(int i=0;i<n;i++){
    S2=solve(i);
    if(abs(S-S2)<1e-7) ans++;
  }
  cout<<ans;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |