#include #include int scenario; int N, M; /* N = side length of mesh; M = number of pairs */ int pair[10000][2]; /* N <= 100, so at most 100*100 pairs */ void getdata() { int i; scanf("%d", &M); for (i = 0; i < M; i++) scanf("%d %d", &pair[i][0], &pair[i][1]); } int dist(int r1, int c1, int r2, int c2) { return 1 + (int)(fabs(r2-r1) + fabs(c2-c1)); } void processdata() { int i,j,k,l,m; int row1,col1,row2,col2,temprow,tempcol; double average,minavg; minavg = 1e38; /* for each rotation ... */ for (i = 0; i < 3; i++) { /* for each horizontal reflection ... */ for (j = 0; j <= 1; j++) { /* for each vertical reflection ... */ for (k = 0; k <= 1; k++) { /* for each pair ... */ average = 0.0; for (l = 0; l < M; l++) { row1 = (pair[l][0]-1)/N; row2 = (pair[l][1]-1)/N; col1 = (pair[l][0]-1)%N; col2 = (pair[l][1]-1)%N; for (m = 0; m < i; m++) { temprow = col2; tempcol = N - row2 - 1; row2 = temprow; col2 = tempcol; } if (j > 0) col2 = N - col2 - 1; if (k > 0) row2 = N - row2 - 1; /* printf("debug: %d -> (%d,%d), %d->(%d,%d)\n",pair[l][0],row1,col1, pair[l][1],row2,col2); printf(" dist = %d\n",dist(row1,col1,row2,col2)); */ average += dist(row1,col1,row2,col2); } if (average/M < minavg) minavg = average/M; } } } if (scenario > 1) { printf("\n"); } printf("Scenario %d: smallest average = %0.4lf\n", scenario, minavg); } int main() { scenario = 0; while (scanf("%d",&N) && N > 0) { scenario++; getdata(); processdata(); } }