Language: C++

#include<iostream>
#include<complex>
#include<cmath>
#include<vector>
using namespace std;
#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
typedef complex<double> P;

double dot(P a,P b){
  return a.real()*b.real()+a.imag()*b.imag();
}

//~ÌSÀWða,b,¼aðr1,r2Æ·éB
//r1Ær2ÌÔÌ£ðßÄ]·èÉæèr1Æ»ÌÓÌÈ·pðßéB
// ÆÍpolarðgÁÄÀWð¶¬·éB
//ñ_ÌÀWðÔ·B
pair<double,double> CC_intersection(P a,P b,double r1,double r2){//~Æ~Ìð_
  double r3 = abs(a-b);
  double theta = acos( (r1*r1 + r3*r3 -r2*r2)/(2*r1*r3) ); 
  return make_pair(theta+arg(b-a),arg(b-a)-theta);
}

bool cmp(const P &a,const P&b){
  return arg(a)<arg(b);
}
class Circle{
public:
  vector<double> data;
};

double solve(int n,P *in,double *r){
  Circle data[n];
  double ret =0;
  rep(i,n){
    rep(j,n){
      if ( i==j)continue;
      if ( r[i]+r[j] <abs(in[i]-in[j]))continue;
      pair<double,double> a=CC_intersection(in[i],in[j],r[i],r[j]);
      data[i].data.push_back(a.first);
      data[i].data.push_back(a.second);
    }
  }
  
  rep(i,n)sort(data[i].data.begin(),data[i].data.end());
  


  rep(i,n){
    int size=data[i].data.size();
    if ( size==0)ret+=r[i]*acos(-1)*2;
    rep(j,size){
      double now = data[i].data[j],nex=data[i].data[(j+1)%size];
      double theta = (nex-now)/2+now;
      if (nex-now<0)theta=(acos(-1)*2+nex-now)/2+now;
      
      P mid = polar(r[i],theta)+in[i];
      
      bool flag=true;
      rep(k,n){
	if ( i == k)continue;
	if (abs(in[k]-mid)<r[k]){flag=false;break;}
      }

      double test =nex-now;
      if ( test <0)test=acos(-1)*2+nex-now;
      if ( flag){
	ret+=r[i]*abs(test);
      }
      
    }
  }
  return ret;
}

main(){
  int n;
  while(cin>>n&&n){
    P in[n];double r[n];
    rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
    printf("%.7lf\n",solve(n,in,r));
  }
  return false;
}

Compiler output:
a.cc: In function 'double solve(int, P*, double*)':
a.cc:45:11: error: 'sort' was not declared in this scope; did you mean 'sqrt'?
   45 |   rep(i,n)sort(data[i].data.begin(),data[i].data.end());
      |           ^~~~
      |           sqrt
a.cc: At global scope:
a.cc:76:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   76 | main(){
      | ^~~~
a.cc: In function 'int main()':
a.cc:80:16: error: no match for 'operator>>' (operand types are 'std::istream' {aka 'std::basic_istream<char>'} and 'double')
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |             ~~~^~~~~~~~~~~~~~
      |             |              |
      |             |              double
      |             std::istream {aka std::basic_istream<char>}
In file included from /usr/include/c++/14/iostream:42,
                 from a.cc:1:
/usr/include/c++/14/istream:170:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  170 |       operator>>(bool& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:170:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'bool&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:174:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  174 |       operator>>(short& __n);
      |       ^~~~~~~~
/usr/include/c++/14/istream:174:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'short int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:177:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  177 |       operator>>(unsigned short& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:177:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'short unsigned int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:181:7: note: candidate: 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]' (near match)
  181 |       operator>>(int& __n);
      |       ^~~~~~~~
/usr/include/c++/14/istream:181:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:184:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  184 |       operator>>(unsigned int& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:184:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'unsigned int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:188:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  188 |       operator>>(long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:188:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'long int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:192:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  192 |       operator>>(unsigned long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:192:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'long unsigned int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:199:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  199 |       operator>>(long long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:199:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'long long int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:203:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  203 |       operator>>(unsigned long long& __n)
      |       ^~~~~~~~
/usr/include/c++/14/istream:203:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'long long unsigned int&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:219:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  219 |       operator>>(float& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:219:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'float&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:223:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  223 |       operator>>(double& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:223:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'double&' to an rvalue of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:227:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]' (near match)
  227 |       operator>>(long double& __f)
      |       ^~~~~~~~
/usr/include/c++/14/istream:227:7: note:   conversion of argument 1 would be ill-formed:
a.cc:80:28: error: cannot bind non-const lvalue reference of type 'long double&' to a value of type 'double'
   80 |     rep(i,n)cin>>in[i].real()>>in[i].imag()>>r[i];
      |                  ~~~~~~~~~~^~
/usr/include/c++/14/istream:328:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]'
  328 |       operator>>(void*& __p)
      |       ^~~~~~~~
/usr/include/c++/14/istream:328:25: note:   no known conversion for argument 1 from 'double' to 'void*&'
  328 |       operator>>(void*& __p)
      |                  ~~~~~~~^~~
/usr/include/c++/14/istream:122:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(__istream_type& (*)(__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>]'
  122 |       operator>>(__istream_type& (*__pf)(__istream_type&))
      |       ^~~~~~~~
/usr/include/c++/14/istream:122:36: note:   no known conversion for argument 1 from 'double' to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&)' {aka 'std::basic_istream<char>& (*)(std::basic_istream<char>&)'}
  122 |       operator>>(__istream_type& (*__pf)(__istream_type&))
      |                  ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/istream:126:7: note: candidate: 'std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(__ios_type& (*)(__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __istream_type = std::basic_istream<char>; __ios_type = std::basic_ios<char>]'
  126 |       operator>>(__ios_type& (*__pf)(__ios_type&))
      |       ^~~~~~~~
/usr/include/c++/14/istream:126:32: note:   no known conversion for argument 1 from 'double' to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios