osipyonok

Untitled

May 19th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define INF 1000010000
  4. #define nl '\n'
  5. #define pb push_back
  6. #define ppb pop_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define pii pair<int,int>
  11. #define pdd pair<double,double>
  12. #define all(c) (c).begin(), (c).end()
  13. #define SORT(c) sort(all(c))
  14. #define rep(i,n) for( int i = 0; i < n; ++i )
  15. #define repi(i,n) for( int i = 1 ; i <= n; ++i )
  16. #define repn(i,n) for( int i = n - 1 ; i >= 0 ; --i )
  17. #define repf(j,i,n) for( int j = i ; j < n ; ++j )
  18. #define die(s) {std::cout << s << nl;}
  19. #define dier(s) {std::cout << s; return 0;}
  20. #define vi vector<int>
  21. typedef long long ll;
  22.  
  23. using namespace std;
  24.  
  25. inline ll Abs(ll x) {
  26.  return x < 0 ? -x : x;
  27.  }
  28.  
  29. inline void trans(ll &x, ll &y) {
  30. ll t=x-y;
  31.  y=x+y;
  32. x=t;
  33. }
  34. inline int __gcd ( int a, int b ){
  35.   if ( a==0 ) return b;
  36.   return __gcd ( b%a, a );
  37. }
  38.  
  39. ll greenA, greenB, redA, redB;
  40.  
  41. inline void edge(ll x1, ll y1, ll x2, ll y2) {
  42.     greenA += x1 * y2 - x2 * y1;
  43.     greenB += __gcd(Abs(x2-x1), Abs(y2-y1));
  44.  
  45.     trans(x1, y1);
  46.     trans(x2, y2);
  47.  
  48.     redA += x1 * y2 - x2 * y1;
  49.     redB += __gcd(Abs(x2-x1), Abs(y2-y1));
  50. }
  51. int main() {
  52.     ios_base::sync_with_stdio(false);
  53.     cin.tie(NULL);
  54.     cout.precision(0);
  55.     int N, d, theta;
  56.     int x0, y0, x1, y1, x2, y2;
  57.  
  58.        while (scanf("%d %d %d", &d, &theta, &N) == 3 && d > 0) {
  59.         greenA = greenB = redA = redB = 0;
  60.  
  61.         scanf(" %d %d", &x0, &y0);
  62.         x1 = x0; y1 = y0;
  63.         repf(i , 1 , N) {
  64.             scanf(" %d %d", &x2, &y2);
  65.             //cin >> x2 >> y2;
  66.             edge(x1, y1, x2, y2);
  67.             x1 = x2; y1 = y2;
  68.         }
  69.         edge(x1, y1, x0, y0);
  70.  
  71.         ll greenI = (Abs(greenA) - greenB + 2) / 2;
  72.         ll redI = (Abs(redA) - redB + 2) / 2;
  73.  
  74.         double area = Abs(greenA) / 2.0 * d * d * sin(theta*2*acos(0.0)/180.0);
  75.         if (fabs(area - floor(area)) < fabs(area - ceil(area)))
  76.             area = floor(area);
  77.         else
  78.             area = ceil(area);
  79.        cout << redI - greenI << " " <<fixed <<  area << nl;
  80.     }
  81. }
Add Comment
Please, Sign In to add comment