v 0. Pasted by slipstak2 as cpp at 2011-01-08 14:41:37 MSK and set expiration to never.

Paste will expire never.

  1. // Меньшиков. Тренировка 13.
  2. // 13D. Центр тяжести [centgrav]
  3. // ibelyaev: 07Jan2011
  4.  
  5. #include <iostream>
  6. #include <cstdio>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. const double eps = 1e-9;
  12. double _fabs(double a)
  13. {
  14.     if (a<0) return -a;
  15.     return a;
  16. }
  17. bool Equal(double a, double b)
  18. {
  19.     return _fabs(a-b) <= eps;
  20. }
  21. struct point
  22. {
  23.     double x, y;
  24.     point(){}
  25.     point(double X, double Y)
  26.     {
  27.         x = X;
  28.         y = Y;
  29.     }
  30.     void input()
  31.     {
  32.         cin>>x>>y;
  33.     }
  34.     void output()
  35.     {
  36.         if (Equal(x,0)) x = 0;
  37.         if (Equal(y,0)) y = 0;
  38.         printf("%0.2f %0.2f",x,y);
  39.     }
  40. };
  41. int n;
  42. vector<point> mas;
  43. void input()
  44. {
  45.     cin>>n;
  46.     mas.resize(n);
  47.     for (int i=0;i<n;i++)
  48.         mas[i].input();
  49. }
  50. double findS(const point &a, const point &b, const point &c)
  51. {
  52.     return 0.5*(a.x*b.y + b.x*c.y + c.x *a.y - a.y*b.x - b.y*c.x - c.y*a.x);
  53. }
  54. void solve()
  55. {
  56.    
  57.     double S = 0;
  58.     double midX = 0;
  59.     double midY = 0;
  60.     for (int i=1;i<n-1;i++)
  61.     {
  62.         double curS = findS(mas[0], mas[i], mas[i+1]);
  63.         S += curS;
  64.         midX += curS * (mas[0].x + mas[i].x + mas[i+1].x) / 3;
  65.         midY += curS * (mas[0].y + mas[i].y + mas[i+1].y) / 3;
  66.     }
  67.     point center(midX/S, midY/S);
  68.     center.output();
  69. }
  70. int main()
  71. {
  72.     freopen("input.txt","r",stdin);
  73.     freopen("output.txt","w",stdout);
  74.  
  75.     input();
  76.     solve();
  77.     return 0;
  78. }


Editing is locked.