#include #include int abs (int x) { if (x > 0) return x; else return -x; } int main (void) { int k, K; int n, q, i, j, d, r, l; char qs[101][256]; char *w[101][30000]; int link[101][30000]; int score[101]; int maxscore; int wc[101]; char s[256]; char *t; char flag; FILE *in = fopen ("csci.in", "r"); fscanf (in, "%d\n", &K); for (k = 1; k <= K; k ++) { printf ("Data Set %d:\n", k); fscanf (in, "%d %d\n", &q, &n); for (j = 0; j < q; j ++) { fgets (qs[j], 256, in); qs[j][strlen(qs[j])-1] = 0; } for (i = 1; i <= n; i ++) { wc[i] = 0; for (fscanf (in, "%d\n", &l); l > 0; l --) { fgets (s, 256, in); s[strlen(s)-1] = 0; for (t = strtok (s, " \n\t"); t != 0; t = strtok (NULL, " \n\t")) { if (t[0] == '[') { w[i][wc[i]] = (char*) malloc(256); for (j = 1; t[j] != ','; j ++) w[i][wc[i]][j-1] = t[j]; j ++; sscanf (t+j, "%d]", &link[i][wc[i]]); } else { w[i][wc[i]] = strdup(t); link[i][wc[i]] = 0; } wc[i] ++; } } } for (j = 0; j < q; j ++) { for (i = 1; i <= n; i ++) score[i] = 0; for (i = 1; i <= n; i ++) for (r = 0; r < wc[i]; r ++) if (strcmp (qs[j], w[i][r]) == 0) { score[i] ++; for (d = -3; d <= 3; d ++) if (r+d >= 0 && r+d < wc[i] && link[i][r+d] > 0) score[link[i][r+d]] += 4-abs(d); } maxscore = 0; for (i = 1; i <= n; i ++) if (score[i] > maxscore) maxscore = score[i]; flag = 0; for (i = 1; i <= n; i ++) if (score[i] == maxscore) { if (flag) printf (" "); printf ("%d", i); flag = 1; } printf ("\n"); } } fclose (in); return 0; }