// @BEGIN_OF_SOURCE_CODE /* @JUDGE_ID: 17243NT 142 C++ */ // Send to judge@uva.es #include #include #ifdef ONLINE_JUDGE #define ins cin #define outs cout #else #define ins fin #define outs fout ifstream fin("myprog.in"); ofstream fout("myprog.out"); #endif typedef struct { int x1; int y1; int x2; int y2; } region; typedef struct { int x; int y; } coordinate; region regions[30]; coordinate icons[60]; int nregions; int nicons; int getregion(coordinate a) { int r; for(r = nregions - 1; r >= 0; r--) if(regions[r].x1 <= a.x && a.x <= regions[r].x2 && regions[r].y1 <= a.y && a.y <= regions[r].y2) return r; return -1; } int main() { char type; coordinate click; int i, min; for(;;) { ins >> type; if(type == '#') break; if(type == 'I') { ins >> icons[nicons].x >> icons[nicons].y; nicons++; } else if(type == 'R') { ins >> regions[nregions].x1 >> regions[nregions].y1 >> regions[nregions].x2 >> regions[nregions].y2; nregions++; } else if(type == 'M') { ins >> click.x >> click.y; i = getregion(click); if(i >= 0) { cout << (char) ('A' + i) << endl; } else { int sqdist[60]; for(i = 0; i < nicons; i++) if(getregion(icons[i]) < 0) { sqdist[i] = (icons[i].x - click.x) * (icons[i].x - click.x) + (icons[i].y - click.y) * (icons[i].y - click.y); } else { sqdist[i] = 100000000; } min = 100000000; for(i = 0; i < nicons; i++) if(sqdist[i] < min) min = sqdist[i]; for(i = 0; i < nicons; i++) if(sqdist[i] == min) { cout << ' '; if(i < 9) cout << ' '; cout << i + 1; } cout << endl; } } } return 0; } // @END_OF_SOURCE_CODE