View Code of Problem 100

#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;

typedef struct song{
	char name[50];
	int minute;
	int second;
	int score;
}song;

int getscore(int a,int b,int c,int d);
bool cmp(song a,song b);

int main() {
	int n;
	while(cin >>n&&n){
		song song[n];
		char a;
		for(int i=0;i<n;i++){
			cin >> song[i].name>>song[i].minute >>a>>song[i].second;
			song[i].score=0;
		}
		/*
		for(int i=0;i<n;i++){
			cout << song[i].name<<" "<<song[i].minute <<":"<<song[i].second;
		}
		*/
		int m;
		cin >>m;
		
		for(int i=0;i<m;i++){
			char name[50];
			int minute,second;
			cin >> name>>minute >>a>>second;
			
			//cout << name<<minute<<":"<<second<<endl;
			
			for(int j=0;j<n;j++){
				if(strcmp(name,song[j].name)==0){
					song[j].score+=getscore(song[j].minute,song[j].second,minute,second);
					//cout <<song[j].score<< "1"<<endl;
				}
			}
			
		}
		sort(song,song+n,cmp);
		for(int i=0;i<n;i++){
			cout << song[i].name<<" "<<song[i].score<<endl;
		}
	}
	return 0;
}

int getscore(int a,int b,int c,int d){
	if((c*60+d)<(float)(a*60+b)/5.0){
		return 0;
	}
	else if((c*60+d)>=(float)((a*60+b)/5.0)&&(c*60+d)<(float)((a*60+b)*2/5.0)){
		return 1;
	}
	else if((c*60+d)>=(float)((a*60+b)*2/5.0)&&(c*60+d)<(float)((a*60+b)*3/5.0)){
		return 2;
	}
	else if((c*60+d)>=(float)((a*60+b)*3/5.0)&&(c*60+d)<(float)((a*60+b)*4/5.0)){
		return 3;
	}
	else if((c*60+d)>=(float)((a*60+b)*4/5.0)&&(c*60+d)<(a*60+b)){
		return 4;
	}
	else if((c*60+d)==(a*60+b)){
		return 5;
	}
}

bool cmp(song a,song b){
	if(a.score!=b.score)
		return a.score>b.score;
	else
		return strcmp(a.name,b.name)<0;
}

Double click to view unformatted code.


Back to problem 100