Advertisement
Guest User

Cercuri4

a guest
Aug 12th, 2012
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. int N;
  10. struct circle
  11. {
  12.        int R, X, Y, F;
  13. }v[3010];
  14. long long best[3010];
  15. bool cmp(circle one, circle two) { return one.R > two.R; }
  16.  
  17.  
  18. double dist(int i, int j)
  19. {
  20.        return sqrt(1.0 * (v[i].X - v[j].X) * (v[i].X - v[j].X) +  1.0 * (v[i].Y - v[j].Y) * (v[i].Y - v[j].Y));
  21. }
  22.  
  23. bool compare(int i, int j)
  24. {
  25.       if(dist(i, j) + 1.0 * min(v[i].R, v[j].R) <= 1.0 * max(v[i].R, v[j].R)) return true;
  26.       return false;
  27. }
  28.  
  29. int main()
  30. {
  31.     freopen("cercuri4.in", "r", stdin);
  32.     freopen("cercuri4.out", "w", stdout);
  33.     int i, j;
  34.     scanf("%i", &N);
  35.     for(i = 0; i < N; i++) scanf("%i %i %i %i", &v[i].X, &v[i].Y, &v[i].R, &v[i].F);
  36.     sort(v, v + N, cmp);
  37.     for(i = 0; i < N; i++)
  38.     {
  39.           best[i] = 1LL * v[i].F;
  40.           int maxim = -0x3f3f3f3f;
  41.           for(j = 0; j < i; j++)
  42.                 if(compare(i, j))
  43.                               maxim = max(maxim, v[j].F);
  44.           if(maxim != -0x3f3f3f3f) best[i] += 1LL * maxim;
  45.     }
  46.     printf("%lld\n", best[N - 1]);
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement