Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define INF 1000010000
- #define nl '\n'
- #define pb push_back
- #define ppb pop_back
- #define mp make_pair
- #define fi first
- #define se second
- #define pii pair<int,int>
- #define pdd pair<double,double>
- #define all(c) (c).begin(), (c).end()
- #define SORT(c) sort(all(c))
- #define rep(i,n) for( int i = 0; i < n; ++i )
- #define repi(i,n) for( int i = 1 ; i <= n; ++i )
- #define repn(i,n) for( int i = n - 1 ; i >= 0 ; --i )
- #define repf(j,i,n) for( int j = i ; j < n ; ++j )
- #define die(s) {std::cout << s << nl;}
- #define dier(s) {std::cout << s; return 0;}
- #define vi vector<int>
- typedef long long ll;
- #define eps (1.0e-10)
- #define MAX_N 50
- using namespace std;
- typedef complex< double > point, vec;
- inline bool eq(const double &a, const double &b){
- return fabs(a - b) < eps;
- }
- inline double dist(const point &a, const point &b){
- return abs(a - b);
- }
- inline double cross(const vec &a, const vec &b){
- return (a.real() * b.imag() - a.imag() * b.real());
- }
- inline point intersection(const point &a1, const point &a2, const point &b1, const point &b2){
- vec b = b2 - b1;
- vec a = a2 - a1;
- return a1 + (cross(b , b1 - a1) / cross(b , a)) * a;
- }
- inline point rotp(const point& p, double theta){
- return p * exp(point(0 , theta));
- }
- void DivideCircle(double r, int n, point *v){
- rep(i , n) v[i] = rotp(point(0 , r) , (i * M_PI) / (n / 2));
- }
- inline double AreaOfRegularPolygon(double r, int n_even){
- return (n_even / 2) * (r * r * sin( M_PI / (n_even / 2)));
- }
- inline double AreaOfRoseWindow(double *r, int n, int k){
- if(n/2 == k) return M_PI*r[k]*r[k] - AreaOfRegularPolygon(r[--k] , n);
- return AreaOfRegularPolygon(r[k] , n) - AreaOfRegularPolygon(r[k - 1] , n);
- }
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.precision(0);
- int m;
- cin >> m;
- rep(j , m){
- double r;
- int n,k;
- point p[MAX_N];
- double kr[MAX_N];
- pair<point , point> v0[MAX_N];
- pair<point , point> v1[MAX_N];
- cin >> r >> n >> k;
- DivideCircle(r , n , p);
- rep(i , n / 2){
- v0[i].fi = p[0];
- v0[i].se = p[n / 2 + i];
- v1[i].fi = p[1];
- v1[i].se = p[(n / 2 + i + 1) % n];
- }
- repf(i , 1 , n / 2){
- point q = intersection(v0[i].fi , v0[i].se , v1[i].fi , v1[i].se);
- kr[i] = abs(q);
- }
- kr[0] = 0.;
- kr[n / 2] = r;
- printf("%.4lf\n" , AreaOfRoseWindow(kr , n ,k));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement