1084
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> #include <math.h> using namespace std; typedef vector<int> vi; typedef vector<string> vs; typedef vector<vi> vvi; typedef pair<int,int> ii; #define sz(a) int((a).size()) #define pb push_back #define all(c) (c).begin(),(c).end() //#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++) #define present(c,x) ((c).find(x) != (c).end()) #define cpresent(c,x) (find(all(c),x) != (c).end()) #define FOR(_i,_n) for(int _i = 0; _i < _n; _i++) #define FORI(_i, _k, _n) for(int _i = _k; _i < _n; _i++) #define INPUT_FILE "xo.in" #define OUTPUT_FILE "xo.out" #define M_PI 3.14159265358979323846 #define M_PI_2 1.57079632679489661923 int main(void) { #ifdef ALEX freopen("input.in", "r", stdin); freopen("output.out", "w", stdout); #else // freopen(INPUT_FILE, "r", stdin); // freopen(OUTPUT_FILE, "w", stdout); #endif int l,r; double res = 0.0; cin >> l >> r; if(l >= 2 * r) { printf("%0.3lf", (double)(M_PI*r*r)); } else if( (l*l) <= (2*r*r)) { printf("%0.3lf", (double)(l*l)); } else { double a = acos((double)l/(2.0*(double)r)); double b = M_PI - 4.0*a; res += 2.0*r*r*sin(2*a); res += r*r*b; printf("%.3lf", (double)res); } return 0; }
page revision: 0, last edited: 23 Apr 2007 19:19