Nu aveti permisiuni pentru a descarca fisierul grader_test3.in
Cod sursa(job #1968199)
| Utilizator | Data | 17 aprilie 2017 15:40:49 | |
|---|---|---|---|
| Problema | Adapost 2 | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.99 kb |
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
typedef double f64;
const int MAX_N = 50000;
const f64 EPS = 1e-5f;
f64 x[MAX_N], y[MAX_N];
inline f64 calc(f64 xP, f64 yP, int n) {
f64 s = 0.0f;
for(int i = 0; i < n; ++i)
s = s + sqrt((xP - x[i]) * (xP - x[i]) + (yP - y[i]) * (yP - y[i]));
return s;
}
int main() {
int n;
srand(time(NULL));
FILE *fin = fopen("adapost2.in", "r");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i)
fscanf(fin, "%lf%lf", &x[i], &y[i]);
fclose(fin);
f64 pas = 250.0f;
f64 x = 500.0f;
f64 y = 500.0f;
while(pas > EPS) {
f64 xdelta = (calc(x + EPS, y, n) - calc(x, y, n)) / EPS;
f64 ydelta = (calc(x, y + EPS, n) - calc(x, y, n)) / EPS;
if(xdelta < 0.0f)
x = x + pas;
else
x = x - pas;
if(ydelta < 0.0f)
y = y + pas;
else
y = y - pas;
pas = pas * 4.0f / 5.0f;
}
FILE *fout = fopen("adapost2.out", "w");
fprintf(fout, "%f %f", x, y);
fclose(fout);
return 0;
}
