Math
#include <iostream>
#include <algorithm>
using namespace std;
bool vis[2005];
struct node {
int time, f, id;
}a[2005], b[2005];
bool cmp(node x, node y) {
return x.f < y.f;
}
bool cmp2(node x, node y) {
return x.time > y.time;
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> a[i].time >> a[i].f;
a[i].id = i;
b[i] = {a[i].time, a[i].f, i};
}
sort(a + 1, a + n + 1, cmp);
sort(b + 1, b + n + 1, cmp2);
int cnt = 0, sum = 0;
for(int i = 1; i <= n; i++) {
if(!vis[a[i].id]) {
cnt++;
vis[a[i].id] = true;
for(int j = n - cnt; j >= max(1, n - cnt - a[i].time); j--) {
vis[b[j].id] = true;
cnt++;
}
sum += a[i].f;
}
}
cout << sum << endl;
return 0;
}
Circle
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double x[10], y[10];
double dis(double x1, double y1, double x2, double y2) {
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main() {
double maxx = -1e9, maxy = -1e9, minx = 1e9, miny = 1e9;
for(int i = 1; i <= 4; i++) {
cin >> x[i] >> y[i];
maxx = max(maxx, x[i]);
minx = min(minx, x[i]);
maxy = max(maxy, y[i]);
miny = min(miny, y[i]);
}
cout << fixed << setprecision(6);
for(double i = minx; i <= maxx; i += 0.01) {
for(double j = miny; j <= maxy; j += 0.01) {
// cout << i << ' ' << j << endl;
bool flag = true;
double ans = dis(i, j, x[1], y[1]);
for(int k = 2; k <= 4; k++) {
if(abs(ans - dis(i, j, x[k], y[k])) > 0.3) flag = false;
}
if(flag) {
cout << 1 << ' ' << i << ' ' << j << ' ' << ans << endl;
return 0;
}
}
}
return 0;
}