CSU1312:榜单(模拟)
来源:互联网 发布:电信域名服务器地址 编辑:程序博客网 时间:2024/04/28 04:21
Description
ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如Oricon和Billboard,现在给出每周各个单曲的销量请给出每周的TOP5以及TOP5中各个单曲的浮动情况。
量的排名是按照本周销量排名,而不是总销量。
浮动情况则是较上周的排名变动,也就是说即使某单曲本周销量比上周的差,但排名比上周高,也是*UP*。反之若排名比上周低则为*DOWN*。若与上周的名次一样,则是*STAY*。
若是本周发行的新单(前面未有统计过销量),则浮动的情况为*NEW*。所以第一周所有单的情况都为*NEW*。
Input
多组数据,每周第一行输入为一个正整数N(5<=N<=10)表示当周统计了销量的专辑数,当N=0时结束输入。(不超过10周)
每周的单曲名字都是不超过30位的字符串(不会有空格,连续的串),名字后面跟的就是销量,单周最大销量不超过200万张。并且在不同周,相同的专辑名字一定是一模一样(相同的字符串)。
每周不会出现两个单曲销量相同。
本周没有统计前面某个已存在单曲的销量则说明本周其销量小得可以忽略,为0。
Output
第一组数据为第一周,第二组数据为第二周,以此类推。
每周数据第一行为WEEK k其中k为周数,WEEK k的左右两边各16个'-'。
紧接着五行,依次为top1~top5。
先输出当前是第几名"rank.",再接着当前名次单曲较上周的浮动情况。
*DOWN*与*STAY*后面空两格格输出单曲名,*NEW*后面空三格输出单曲名,*UP*后面空四格输出单曲名。
每行输出完单曲名后不要输出多余空格。
具体输出格式细节参考样例。
Sample Input
6 AKB48-Give_me_Five 1200000 Adele-Set_Fire_To_The_Rain 900000 Katy_Perry-Part_Of_Me 400000 KANA-Sakura,I_love_you 360000 Nicki_Minaj-Starships 300000 AAA-SAILING 350000 5 KAT_TUN-CHAIN 550000 Adele-Set_Fire_To_The_Rain 850000 AKB48-Give_me_Five 500000 KANA-Sakura,I_love_you 300000 Nicki_Minaj-Starships 290000 0
Sample Output
----------------WEEK 1---------------- 1.*NEW* AKB48-Give_me_Five 2.*NEW* Adele-Set_Fire_To_The_Rain 3.*NEW* Katy_Perry-Part_Of_Me 4.*NEW* KANA-Sakura,I_love_you 5.*NEW* AAA-SAILING ----------------WEEK 2---------------- 1.*UP* Adele-Set_Fire_To_The_Rain 2.*NEW* KAT_TUN-CHAIN 3.*DOWN* AKB48-Give_me_Five 4.*STAY* KANA-Sakura,I_love_you 5.*UP* Nicki_Minaj-Starships
模拟题,需要注意的是,以前操作过的每首歌曲都是存在的,而不只是根据上一组来判定
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct node{ char name[50]; int num; int no;} now[30];struct kode{ char name[50]; int num; int no;} before[300];int cmp(node x,node y){ return x.num>y.num;}int cmp2(kode x,kode y){ return x.num>y.num;}int main(){ int n,i,week = 0,m = 0,j; //m是记录所有曾经出现过的歌曲的数目 while(~scanf("%d",&n),n) { week++; for(i = 0; i<n; i++) scanf("%s %d",now[i].name,&now[i].num); sort(now,now+n,cmp); for(i = 0; i<n; i++) now[i].no = i+1; printf("----------------WEEK %d----------------\n",week); if(week==1) { for(i = 0; i<5; i++) { printf("%d.*NEW* %s\n",now[i].no,now[i].name); } } else if(week) { for(i = 0; i<5; i++) { for(j = 0; j<m; j++) { if(!strcmp(now[i].name,before[j].name))//比较排名 { if(now[i].no>before[j].no) printf("%d.*DOWN* %s\n",now[i].no,now[i].name); else if(now[i].no==before[j].no) printf("%d.*STAY* %s\n",now[i].no,now[i].name); else if(now[i].no<before[j].no) printf("%d.*UP* %s\n",now[i].no,now[i].name); break; } } if(j>=m) printf("%d.*NEW* %s\n",now[i].no,now[i].name); } } for(i = 0; i<n; i++) { for(j = 0;j<m;j++) { if(!strcmp(before[j].name,now[i].name))//已经出现过,更新销量 { before[j].num = now[i].num; break; } } if(j>=m || m==0)//m为0,或者以前的列表中没有出现过,则加入以前的列表中 { strcpy(before[m].name,now[i].name); before[m].num = now[i].num; m++; } } for(j = 0;j<m;j++) { for(i = 0;i<5;i++) { if(!strcmp(before[j].name,now[i].name))//找出这次排名前五的 { before[j].no = now[i].no; break; } } if(i>=5)//排名在五之后,令其排名为无穷大 { before[j].no = 999999999; } } } return 0;}
- CSU1312:榜单(模拟)
- CSU 1312 榜单(模拟)
- 模拟鼠标的单双击
- 模拟底部弹出小菜单
- Listener模拟单态登录
- 模拟Servlet单例多线程
- NOIP 模拟赛 单 single
- 经典互斥问题模拟--单车道过桥--模拟代码
- 程序主菜单之javascript完全模拟
- 模拟 html radio 的单选效果
- js/jquery模拟radio单选效果
- VS2012 MFC 单文档 模拟时钟日历程序
- 使用缓存来模拟实现单例
- HTTP 单线程 模拟迅雷下载
- 计算复杂性学习1-单带图灵机模拟
- cisco模拟单臂路由实现
- Span模拟单选按钮Radio
- STM32L152 ADC单通道采集模拟量
- 解决PowerDesigner 创建表Code和Name同步的问题
- TOJ3660家庭关系(并查集+hash+图的连通性)
- uvalive 2326 - Moving Tables(区间覆盖问题)
- 一些关于最小二乘法
- (zz)理解LDA,latent dirichlet allocation- David Blei
- CSU1312:榜单(模拟)
- POJ 2485 Highways ( MST 水题 )
- How to think like a Computer Scientist: 课后习题第十四章4
- JAVA操作Excel时文字自适应单元格的宽度设置方法
- vim用法大全
- PAT_1062:Talent and Virtue
- Android 开发中使用 http://zyc-to.blog.163.com/blog/static/1715240020131354535810/?suggestedreading&wumii
- hdu3117 Fibonacci Numbers (矩阵快速幂)
- 解决 oracle 不能安装 statspack