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;
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.