1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| const int mxn = 1e5 + 5; struct P { DB s; int t; }a[mxn];
int p[] = {1, 2, 4, 8, 16}; int err[mxn][5];
int main() { int n, m; scanf("%d %d", &n, &m);
int x; char ch; for(int i=1; i<=m; i++) { scanf("%lf %*d %d", &a[i].s, &x); for(int j=0; j<x; j++) { scanf(" %c", &ch); a[i].t += p[ch-'a']; } } getchar(); for(int i=0; i<n; i++) { DB sum=0; int ans=0, num=0; while(scanf("%c", &ch) && ch != '\n') { if(ch == ')') { num++; if(ans==a[num].t) sum += a[num].s; else if((ans | a[num].t)==a[num].t) sum += a[num].s * 0.5;
for(int j=0; j<5; j++) if(((ans ^ a[num].t) & p[j]) == p[j]) err[num][j]++;
ans = 0; } if(isalpha(ch)) ans += p[ch-'a']; } printf("%.1lf\n", sum); }
int mx = 0; for(int i=1; i<=m; i++) for(int j=0; j<5; j++) if(mx < err[i][j]) mx = err[i][j];
if(mx == 0) { printf("Too simple\n"); return 0; }
for(int i=1; i<=m; i++) for(int j=0; j<5; j++) if(mx == err[i][j]) printf("%d %d-%c\n", mx, i, j+'a');
return 0; }
|