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;
}