#include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; struct music{ char name[100]; int time; int sc; }; bool cmp(music a,music b) { if(a.sc!=b.sc)//a,b的分数不同,大的在前 return a.sc>b.sc; else return strcmp(a.name,b.name)<0;//分数相同看字典大小 } int main() { int n,m; music m1[105]; music m2;//m1为歌曲信息,m2为我的听歌记录 while(scanf("%d",&n)!=EOF&&n!=0) { for(int i=0;i<n;i++) { int min,s; //分数,秒 scanf("%s",m1[i].name); scanf("%d:%d",&min,&s); m1[i].time=min*60+s; m1[i].sc=0; //初始化分数 } scanf("%d",&m); for(int i=0;i<m;i++) { int min,s; scanf("%s",m2.name); scanf("%d:%d",&min,&s); m2.time=min*60+s;//听歌的总秒数 for(int j=0;j<n;j++){ if(strcmp(m2.name,m1[j].name)==0)//找到对应的歌曲,加分 m1[j].sc+=(5*m2.time/m1[j].time); } } //sort(m1,m1+n,cmp); for(int i=0;i<n;i++)//别人答案的方法,我自己用的是sort函数,运行时异常通不过 { int pos = 0; for(int j = 1; j < n; j++) { if(m1[j].sc > m1[pos].sc) pos = j; else if(m1[j].sc == m1[pos].sc) if(strcmp(m1[j].name, m1[pos].name) < 0) pos = j; } printf("%s %d\n", m1[pos].name, m1[pos].sc); m1[pos].sc = -1; } // for(int i=0;i<n;i++) // printf("%s %d\n",m1[i].name,m1[i].sc); } return 0; } |
Double click to view unformatted code.