#include #include float dist (float x1, float y1, float x2, float y2) { return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2); } int main (void) { int K, k; int n, i; float x[1001], y[1001], x0, y0; float d; FILE *in = fopen ("cruise.in", "r"), *out = fopen("cruise.out", "w"); fscanf (in, "%d\n", &K); for (k = 1; k <= K; k ++) { fprintf (out, "Data Set %d:\n", k); fscanf (in, "%d %f %f\n", &n, &x0, &y0); d = -1; for (i = 0; i < n; i ++) { fscanf (in, "%f %f\n", &x[i], &y[i]); if (d < 0 || dist(x0, y0, x[i], y[i]) < d) d = dist(x0, y0, x[i], y[i]); } for (i = 0; i < n; i ++) { int j = (i+1)%n; float u = ((x0-x[i])*(x[j]-x[i])+(y0-y[i])*(y[j]-y[i])) / dist(x[i], y[i], x[j], y[j]); if (0 < u && u < 1) { float xt = (1-u)*x[i] + u*x[j], yt=(1-u)*y[i] + u*y[j]; if (dist(x0, y0, xt, yt) < d) d = dist(x0, y0, xt, yt); } } fprintf (out, "%0.2f\n\n", (float) sqrt((double) d)); fscanf (in, "\n"); } fclose (in); fclose (out); return 0; }