View Code of Problem 100

#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++)
			printf("%s %d\n",m1[i].name,m1[i].sc);
	}
    return 0;
}

Double click to view unformatted code.


Back to problem 100