#ifndef INCLUDE_MODE #define INCLUDE_MODE // #define REACTIVE // #define USE_GETLINE /* #define SUBMIT_ONLY */ #define DEBUG_OUTPUT #define SAMPLE_CHECK B #endif #ifdef INCLUDE_MAIN VO Solve() { CIN( double , X0 , Y0 , Z0 , R0 ); CIN( double , X1 , Y1 , Z1 , R1 ); double R2 = sqrt( ( X0 - X1 ) * ( X0 - X1 ) + ( Y0 - Y1 ) * ( Y0 - Y1 ) + ( Z0 - Z1 ) * ( Z0 - Z1 ) ); SET_PRECISION( 7 ); RETURN( SphereIntersectionVolume( R0 , R1 , R2 ) ); } REPEAT_MAIN(1e5); #else /* INCLUDE_MAIN */ #ifdef INCLUDE_SUB // /* COMPAREに使用。圧縮時は削除する。*/ // using answer_type = ll; // answer_type Naive( int N , int M , int K , const vector& A , const bool& debug_output = true ) // { // answer_type a{}; // return a; // } // // answer_type Answer( int N , int M , int K , const vector& A , const bool& debug_output = true ) // { // answer_type a{}; // return a; // } /* 圧縮時は中身だけ削除する。*/ IN VO Experiment() { // 1変数 ../Contest/Template/Experiment/OneVariable.txt // 2変数 ../Contest/Template/Experiment/TwoVariable.txt // 3変数 ../Contest/Template/Experiment/ThreeVariable.txt } /* 圧縮時は中身だけ削除する。*/ IN VO SmallTest() { // 数 ../Contest/Template/SmallTest/Number.txt // 配列 ../Contest/Template/SmallTest/Array.txt // 順列 ../Contest/Template/SmallTest/Permutation.txt // 文字列 ../Contest/Template/SmallTest/String.txt // グリッド ../Contest/Template/SmallTest/Grid.txt // グラフ ../Contest/Template/SmallTest/Graph.txt // 重み付きグラフ ../Contest/Template/SmallTest/WeightedGraph.txt // 区間クエリ ../Contest/Template/SmallTest/IntervalQuery.txt CERR( "全てのケースを確認しました。" ); } /* 圧縮時は中身だけ削除する。*/ IN VO RandomTest( const int& test_case_num ) { // 数 ../Contest/Template/RandomTest/Number.txt // 配列 ../Contest/Template/RandomTest/Array.txt // 順列 ../Contest/Template/RandomTest/Permutation.txt // 文字列 ../Contest/Template/RandomTest/String.txt // グリッド ../Contest/Template/RandomTest/Grid.txt // グラフ ../Contest/Template/RandomTest/Graph.txt // 重み付きグラフ ../Contest/Template/RandomTest/WeightedGraph.txt // 区間クエリ ../Contest/Template/RandomTest/IntervalQuery.txt // 多種クエリ ../Contest/Template/RandomTest/MultiTypeQuery.txt REPEAT( test_case_num ){ } CERR( "全てのケースを確認しました。" ); } #define INCLUDE_MAIN #include __FILE__ #else /* INCLUDE_SUB */ #ifdef INCLUDE_LIBRARY /* VVV 常設でないライブラリは以下に挿入する。*/ // AffineSpace ../Contest/Template/Library/AffineSpace.txt // Arithmetic ../Contest/Template/Library/Arithmetic.txt // BFS ../Contest/Template/Library/BFS.txt // BIT ../Contest/Template/Library/BIT.txt // CoordinateCompress ../Contest/Template/Library/CoordinateCompress.txt // DFS ../Contest/Template/Library/DFS.txt // DifferenceSequence ../Contest/Template/Library/DifferenceSequence.txt // Dijkstra ../Contest/Template/Library/Dijkstra.txt // Knapsack ../Contest/Template/Library/Knapsack.txt // Matrix ../Contest/Template/Library/Matrix.txt // Polynomial ../Contest/Template/Library/Polynomial.txt // Set ../Contest/Template/Library/Set.txt // SqrtDecomposition ../Contest/Template/Library/SqrtDecomposition.txt // UnionFind ../Contest/Template/Library/UnionFind.txt #ifdef DEBUG #include "c:/Users/user/Documents/Programming/Mathematics/Geometry/AffineSpace/Polytope/Triangle/Area/a_Body.hpp" #else // 三角形の符号付き面積を頂点座標から計算 TE IN INT Area(CO INT& x0,CO INT& y0,CO INT& x1,CO INT& y1,CO INT& x2,CO INT& y2){RE(x1 - x0)*(y2 - y0)-(y1 - y0)*(x2 - x0);}TE TY PAIR> IN RET Area(CO PAIR& v0,CO PAIR& v1,CO PAIR& v2){RE Area(get<0>(v0),get<1>(v0),get<0>(v1),get<1>(v1),get<0>(v2),get<1>(v2));} // 三角形の符号なし面積を辺長から計算 IN double Area(CO double& l0,CO double& l1,CO double& l2){CO double s =(l0 + l1 + l2)/ 2;RE sqrt(s *(s - l0))* sqrt((s - l1)*(s - l2));} // 凸多角形の符号付き面積を頂点座標から計算 TE TY PAIR> IN RET Area(CO VE>& v){RET AN{};CRI SZ = v.SZ();AS(SZ > 2);for(int i = 2;i < SZ;i++){AN += Area(v[0],v[i-1],v[i]);}RE AN;} #endif #ifdef DEBUG #include "c:/Users/user/Documents/Programming/Mathematics/Geometry/AffineSpace/Distance/L2/a_Body.hpp" #else TE IN int sign(CO INT& n,CO INT& epsilon = 0){CE bool is_not_double = !is_same_v;AS(is_not_double || epsilon > 0);RE n < -epsilon?-1:epsilon < n?1:0;} TE IN INT L22(CO INT& x,CO INT& y){RE x * x + y * y;}TE TY PAIR> IN INT L22(CO PAIR& v){RE L22(get<0>(v),get<1>(v));}TE IN INT L22_Distance(CO INT& x0,CO INT& y0,CO INT& x1,CO INT& y1){RE L22(x0 - x1,y0 - y1);}TE TY PAIR> IN INT L22_Distance(CO PAIR& v0,CO PAIR& v1){RE L22(v0 - v1);}TE IN double L2(CO INT& x,CO INT& y){RE sqrt(L22(x,y));}TE TY PAIR> IN double L2(CO PAIR& v){RE sqrt(L22(v));}TE IN double L2_Distance(CO INT& x0,CO INT& y0,CO INT& x1,CO INT& y1){RE sqrt(L22_Distance(x0,y0,x1,y1));}TE TY PAIR> IN double L2_Distance(CO PAIR& v0,CO PAIR& v1){RE sqrt(L22_Distance(v0,v1));}TE IN bool L2_LongestEdge(CO INT& x0,CO INT& y0,CO INT& x1,CO INT& y1,CO INT& z,CO INT& w,CO INT& epsilon){RE sign(L22_Distance(x0,y0,x1,y1)- max(L22_Distance(x0,y0,z,w),L22_Distance(z,w,x1,y1)),epsilon)>= 0;}TE TY PAIR> IN bool L2_LongestEdge(CO PAIR& v0,CO PAIR& v1,CO PAIR& v2,CO INT& epsilon = 0 ){RE L2_LongestEdge(get<0>(v0),get<1>(v0),get<0>(v1),get<1>(v1),get<0>(v2),get<1>(v2),epsilon);} #endif inline T3 PerpendicularLength( const double& l0 , const double& l1 , const double& l2 ) { const double S = Area( l0 , l1 , l2 ) * 2; return {S/l0,S/l1,S/l2}; } template inline T3 PerpendicularLength( const PAIR& v0 , const PAIR& v1 , const PAIR& v2 ) { return PerpendicularLength( L2_Distance( v1 , v2 ) , L2_Distance( v2 , v0 ) , L2_Distance( v0 , v1 ) ); } template inline T3 AccuteAngle( const INT& l02 , const INT& l12 , const INT& l22 ) { return {l02l12+l22?-1:0,l12l22+l02?-1:0,l22l02+l12?-1:0}; } template