// The difficulty of this question lies in the high precision of the // small increment of 0.001, 0.0001, 0.00001 ....... Yes. # Include <iostream> # include <algorithm> using namespace STD; int all [16390] [8]; int CMP (int A, int B) {return A> B ;} int N; Double A, B, C; int I, j, num = 0; int rank [16390]; int main () {double dd = 10; while (scanf ("% d", & N) {num ++; printf ("case % d:", num); for (I = 0; I <n; I ++) {scanf ("% lf", & A, & B, & C ); all [I] [0] = (INT) (a + 0.000001) * 100); All [I] [1] = (INT) (B + 0.000001) * 100); All [I] [2] = (INT) (C + 0.000001) * 100); All [I] [3] = All [I] [0] + ALL [I] [1]; All [I] [4] = All [I] [0] + ALL [I] [2]; all [I] [5] = All [I] [1] + ALL [I] [2]; all [I] [6] = All [I] [0] + ALL [I] [1] + ALL [I] [2]; all [I] [7] = 0; sort (ALL [I], all [I] + 8, CMP);} for (I = 0; I <N; I ++) scanf ("% d", & rank [I]); bool flag = false; I = 0, j = 1; int m = 0, n = 0; while (I <n & J <n & M <8 & n <8) {If (rank [I] <rank [J]) {If (ALL [rank [I]-1] [m]> = All [rank [J]-1] [N]) {I = J; j ++; M = N; n = 0;} else {n ++ ;}} else {If (ALL [rank [I]-1] [m]> All [rank [J]-1] [N]) {I = J; j ++; M = N; n = 0;} Else {n ++ ;}}} if (j = N & n! = 8) Flag = true; If (FLAG) printf ("%. 2lf \ n ", (double) All [rank [N-1]-1] [m]/100); elsecout <" no solution "<Endl;} return 0 ;}