Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- int N;
- struct circle
- {
- int R, X, Y, F;
- }v[3010];
- long long best[3010];
- bool cmp(circle one, circle two) { return one.R > two.R; }
- double dist(int i, int j)
- {
- 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));
- }
- bool compare(int i, int j)
- {
- if(dist(i, j) + 1.0 * min(v[i].R, v[j].R) <= 1.0 * max(v[i].R, v[j].R)) return true;
- return false;
- }
- int main()
- {
- freopen("cercuri4.in", "r", stdin);
- freopen("cercuri4.out", "w", stdout);
- int i, j;
- scanf("%i", &N);
- for(i = 0; i < N; i++) scanf("%i %i %i %i", &v[i].X, &v[i].Y, &v[i].R, &v[i].F);
- sort(v, v + N, cmp);
- for(i = 0; i < N; i++)
- {
- best[i] = 1LL * v[i].F;
- int maxim = -0x3f3f3f3f;
- for(j = 0; j < i; j++)
- if(compare(i, j))
- maxim = max(maxim, v[j].F);
- if(maxim != -0x3f3f3f3f) best[i] += 1LL * maxim;
- }
- printf("%lld\n", best[N - 1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement