榜单
题目比较淡定,按照题目的意思敲就好了。
#include<stdio.h> #include<iostream> #include<set> #include<string> #include<algorithm> using namespace std; struct node { string name; int list; }sing[100],slist[10]; bool cmp(node a,node b) { return a.list>b.list; } bool cmp1(node a,node b) { return a.list<b.list; } int main() { int n,sum=0; int i,j; set<string> st; int y=1; while(scanf("%d",&n)!=EOF) { if(!n) //本组数据输入完成,数据清零 st.clear(),sum=0,y=1; else { printf("----------------WEEK %d----------------\n",y++); for(i=0;i<n;i++) cin>>slist[i].name>>slist[i].list; sort(slist,slist+n,cmp); for(j=0;j<sum;j++) sing[j].list=6; for(i=0;i<5;i++) { printf("%d.",i+1); if(st.count(slist[i].name)) //旧歌 { for(j=0;j<sum;j++) { if(sing[j].name==slist[i].name) { if(j>i) //up printf("*UP* "),sing[j].list=i+1; else if(j<i)//DOWN printf("*DOWN* "),sing[j].list=i+1; else //stay printf("*STAY* "),sing[j].list=i+1; break; } } } else //旧歌 { st.insert(slist[i].name); printf("*NEW* "); sing[sum].name=slist[i].name; sing[sum++].list=i+1; } cout<<slist[i].name<<endl; } for(i=5;i<n;i++) //未上榜的哥 { if(!st.count(slist[i].name)) //新歌 { st.insert(slist[i].name); sing[sum].name=slist[i].name; sing[sum++].list=i+1; } } sort(sing,sing+sum,cmp1); } } return 0; }