p1597.cpp
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· C++ 代码 · 共 42 行
CPP
42 行
// p1597.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#define zero 1e-10
double x [2] , y [2] , r [2];
double distance ( double a , double b )
{
return sqrt ( a * a + b * b );
}
void Swap ( double &a , double &b )
{ double t = a; a = b; b = t; }
double banana ()
{
double l = distance ( x [1] - x [0] , y [1] - y [0] );
if ( r [0] + r [1] <= l ) return 0;
if ( r [0] > r [1] ) Swap ( r [0] , r [1] );
if ( l + r [0] < r [1] + zero ) return acos ( -1 ) * r [0] * r [0];
double cos1 = ( l * l + r [1] * r [1] - r [0] * r [0] ) / 2 / l / r [1];
double cos0 = ( l * l + r [0] * r [0] - r [1] * r [1] ) / 2 / l / r [0];
double ret = ( acos ( cos0 ) - sqrt ( 1 - cos0 * cos0 ) * cos0 ) * r [0] * r [0] +
( acos ( cos1 ) - sqrt (1 - cos1 * cos1 ) * cos1 ) * r[1] * r [1];
return ret;
}
int main(int argc, char* argv[])
{
freopen ( "p.in" , "r" , stdin );
while ( scanf ( "%lf%lf%lf%lf%lf%lf" , &x [0] , &y [0] , &r [0] , &x [1] , &y [1] , &r [1] ) != EOF )
printf ( "%.3lf\n" , banana () );
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?