#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.