Advertisement
Guest User

Yandex.Contest.2015-r1.B.AC.cpp.2

a guest
May 27th, 2015
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. // Author: Georgy Chebanov
  2. // AC -> {GNU c++ 4.9.2, 220ms, 380.00Kb}
  3.  
  4. #include <bits/stdc++.h>
  5.  
  6. #define forn(i, n) for(int i = 0; i < (int)(n); ++i)
  7.  
  8. using namespace std;
  9.  
  10. const int N = 2000;
  11.  
  12. int w[N];
  13. int px[N];
  14. int py[N];
  15.  
  16. __attribute__((target("sse4.1")))
  17. __attribute__((optimize("O3")))
  18. void solve() {
  19.   int n, a, b, c, s_up, s_down, cc, ans, wn1, wn2, s_all = 0;
  20.   cin >> n;
  21.   forn(i, n) {
  22.     cin >> px[i] >> py[i] >> w[i];
  23.     s_all += w[i];
  24.   }
  25.   ans = (n == 1 ? w[0] : 1e9);
  26.   forn(i, n) forn(j, i) {
  27.     a = py[i] - py[j];
  28.     b = px[j] - px[i];
  29.     c = a * px[i] + b * py[i];
  30.     wn1 = wn2 = s_up = 0;
  31.  
  32.     swap(w[i], wn1);
  33.     swap(w[j], wn2);
  34.  
  35.     forn(k, n) {
  36.       cc = (px[k] * a + py[k] * b - c) >> 31;
  37.       s_up += w[k] & cc;
  38.     }
  39.    
  40.     swap(w[j], wn2);
  41.     swap(w[i], wn1);
  42.  
  43.     s_down = s_all - w[i] - w[j] - s_up;
  44.  
  45.     ans = min(ans, abs( (s_up + w[i] + w[j]) - (s_down) ));
  46.     ans = min(ans, abs( (s_down + w[i] + w[j]) - (s_up) ));
  47.  
  48.     ans = min(ans, abs( (s_up + w[i]) - (s_down + w[j]) ));
  49.     ans = min(ans, abs( (s_down + w[i]) - (s_up + w[j]) ));
  50.   }
  51.   cout << ans << '\n';
  52. }
  53.  
  54. int main() {
  55.   solve();
  56.   return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement