wa wa wa wa 麻烦看一下
程序代码:#include<stdio.h>
#include<string.h>
int main()
{
int n,i,score[100][3],j,m,t,temp,pointer;
char name[100][31],time[100][6],music[10000][31],listen[10000][6],change[31];
float end;
while(scanf("%d",&n)&&n)
{
for(i=0;i<n;i++)
{
scanf("%s%s",name[i],time[i]);
score[i][0]=i;
score[i][1]=((time[i][0]-'0')*10+time[i][1]-'0')*60+(time[i][3]-'0')*10+time[i][4]-'0';
score[i][2]=0;
}
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%s%s",music[i],listen[i]);
for(j=0;j<n;j++)
if(!strcmp(name[j],music[i]))
{pointer=j;break;}
temp=((listen[i][0]-'0')*10+listen[i][1]-'0')*60+(listen[i][3]-'0')*10+listen[i][4]-'0';
end=(temp*1.0)/(score[pointer][1]*1.0);
if(end<0.2) temp=0;
else if(end<0.4) temp=1;
else if(end<0.6) temp=2;
else if(end<0.8) temp=3;
else if(end<1.0) temp=4;
else temp=5;
score[pointer][2]=score[pointer][2]+temp;
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(score[i][2]<score[j][2])
{
temp=score[i][0];
score[i][0]=score[j][0];
score[j][0]=temp;
temp=score[i][2];
score[i][2]=score[j][2];
score[j][2]=temp;
}
}
}
for(i=0;i<n;i++)
{
if(strcmp(name[score[i][0]],name[score[i][0]+1])>0&&score[i][2]==score[i+1][2])
{
strcpy(change,name[score[i][0]]);
strcpy(name[score[i][0]],name[score[i][0]+1]);
strcpy(name[score[i][0]+1],change);
temp=score[i][2];
score[i][2]=score[i+1][2];
score[i+1][2]=temp;
}
t=strlen(name[score[i][0]]);
name[score[i][0]][t]='\0';
printf("%s %d\n",name[score[i][0]],score[i][2]);
}
}
return 0;
}
Description
你使用什么音乐播放器,iTunes、千千静听、酷狗、Winamp 还是 WMP?这些主流的播放器都有一个叫“我的最爱”(也有叫 Top 50 等其他名字)的动态播放列表,里面列出播放次数最多的前 50 首歌曲。
但我觉得,简单地用播放次数作为喜欢的标准是不够准确的。有些歌曲在唱完以后还有一段很长的伴奏,我普遍会直接点“下一首”来跳过,但这样播放器就 认为这首歌没有播放完毕,所以播放次数没有增加,但其实这首歌“几乎”播放完了;另一些歌是我不喜欢听的,可能只播放了前奏我就直接切歌了。所以,仅仅依 靠播放次数是无法区分上面两类歌曲我的喜好情况。
现在,我设计了一种新的统计方法:根据播放时间占总时间的百分比,给每次听歌打 0 到 5 分,最后通过总分来排序。
假设一首歌 ABC.mp3 长度是 01:40,即 100 秒。
如果某一次听歌我只听了 1-19 秒(少于 1/5),则本次得分为 0。
如果听了 20-39 秒,则得 1 分。
如果听了 40-59 秒,则得 2 分。
如果听了 60-79 秒,则得 3 分。
如果听了 80-99 秒,则得 4 分。
如果我耐心地听完整首歌(100秒),则得 5分。
Input
输入会有多组,每一组数据分两部分:
第一部分是歌曲信息列表
第一行是一个数字 n(0 <= n <= 100),表示后面会有 n 行歌曲信息。
接下来 n 行,每一行一条歌曲信息。包含歌曲的名字和总时间。
第二部分是我听歌记录的列表,格式和上面一样:
第一行是一个数字 m(0 <= m <= 10000),表示后面会有 m 行听歌记录。
接下来 m 行,每一行一条听歌记录。包含歌曲的名字和本次播放时间。
歌曲的名字里不会有空格,且长度不少过 30 个字符。
时间个格式是 mm:ss,即长度恒等于 5,分和秒用冒号隔开。时间最长不会超过 8分钟(又不是听相声)。
歌曲名字和时间中间用一个空格隔开。
当 n 等于 0 时,程序结束并退出。
Output
根据前面介绍的规则,算出每首歌的得分,并按照得分倒序输出“歌曲的名字”和“得分”(中间用一个空格隔开)。如果有两首歌的得分一样,那就根据歌曲名字来排序(按照字典顺序)。
Sample Input
5
gala_young_for_you.mp3 03:39
Another_Day_In_Paradise.mp3 05:22
Don't_Cry_For_Me_Argentina.mp3 05:38
I'll_Never_Stop.mp3 03:07
U_Make_Me_Wanna.mp3 03:42
11
I'll_Never_Stop.mp3 03:00
gala_young_for_you.mp3 03:30
Another_Day_In_Paradise.mp3 05:21
I'll_Never_Stop.mp3 03:07
U_Make_Me_Wanna.mp3 03:00
gala_young_for_you.mp3 03:37
Another_Day_In_Paradise.mp3 05:20
U_Make_Me_Wanna.mp3 03:42
Don't_Cry_For_Me_Argentina.mp3 01:07
I'll_Never_Stop.mp3 03:05
Don't_Cry_For_Me_Argentina.mp3 01:08
0
Sample Output
I'll_Never_Stop.mp3 13
U_Make_Me_Wanna.mp3 9
Another_Day_In_Paradise.mp3 8
gala_young_for_you.mp3 8
Don't_Cry_For_Me_Argentina.mp3 1









