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;
- using namespace std;
- inline ll Abs(ll x) {
- return x < 0 ? -x : x;
- }
- inline void trans(ll &x, ll &y) {
- ll t=x-y;
- y=x+y;
- x=t;
- }
- inline int __gcd ( int a, int b ){
- if ( a==0 ) return b;
- return __gcd ( b%a, a );
- }
- ll greenA, greenB, redA, redB;
- inline void edge(ll x1, ll y1, ll x2, ll y2) {
- greenA += x1 * y2 - x2 * y1;
- greenB += __gcd(Abs(x2-x1), Abs(y2-y1));
- trans(x1, y1);
- trans(x2, y2);
- redA += x1 * y2 - x2 * y1;
- redB += __gcd(Abs(x2-x1), Abs(y2-y1));
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.precision(0);
- int N, d, theta;
- int x0, y0, x1, y1, x2, y2;
- while (scanf("%d %d %d", &d, &theta, &N) == 3 && d > 0) {
- greenA = greenB = redA = redB = 0;
- scanf(" %d %d", &x0, &y0);
- x1 = x0; y1 = y0;
- repf(i , 1 , N) {
- scanf(" %d %d", &x2, &y2);
- //cin >> x2 >> y2;
- edge(x1, y1, x2, y2);
- x1 = x2; y1 = y2;
- }
- edge(x1, y1, x0, y0);
- ll greenI = (Abs(greenA) - greenB + 2) / 2;
- ll redI = (Abs(redA) - redB + 2) / 2;
- double area = Abs(greenA) / 2.0 * d * d * sin(theta*2*acos(0.0)/180.0);
- if (fabs(area - floor(area)) < fabs(area - ceil(area)))
- area = floor(area);
- else
- area = ceil(area);
- cout << redI - greenI << " " <<fixed << area << nl;
- }
- }
Add Comment
Please, Sign In to add comment