#include <stdio.h> #include <string.h> typedef struct{ char name[35]; char time[5]; }music; double transtime (char a[5]){ int c[2]={0}; int q=0; for(int p=0;p<strlen(a);p++) if(a[p]==':') q++; else c[q]=c[q]*10+a[p]-'0'; return (c[0]*60.0+c[1]); } int main(){ int i,j; music s[108]; int m,n; while (scanf("%d",&n)!=EOF){ if(n==0) break; double ztime[108]; double rtime[10000]; for(i=1;i<=n;i++){ scanf("%s %s",&s[i].name,&s[i].time); ztime[i]=transtime(s[i].time); } scanf("%d",&m); double result; char a[30],b[5]; double score[108]={0}; for(i=1;i<=m;i++){ scanf("%s %s",&a,&b); rtime[i]=transtime(b); for(j=1;j<=n;j++){ if(strcmp(s[j].name,a)==0){ result=rtime[i]/ztime[j]; if(result>0&&result<0.2) score[j]+=0; if(result>=0.2&&result<=0.4) score[j]+=1; if(result>=0.4&&result<0.6) score[j]+=2; if(result>=0.6&&result<0.8) score[j]+=3; if(result>=0.8&&result<1.0) score[j]+=4; if(result==1.0) score[j]+=5; } } } int temp; double max; int l=n; while (l--){ temp=1; max=score[1]; for(i=2;i<=n;i++){ if(score[i]>max){ max=score[i]; temp=i; } if(score[i]==max){ if(strcmp(s[i].name,s[temp].name)<0){ max=score[i]; temp=i; } } } printf("%s %.0f\n",s[temp].name,score[temp]); score[temp]=-1; } } return 0; } |
Double click to view unformatted code.