模拟

WA了好多次。但其实只要思路正确,不应该WA这么多次的。

大部分都是细节上WA。大笑,纯暴力。

 

代码虐我千百遍,我待代码如初恋微笑

 

Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu

Description

ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如OriconBillboard,现在给出每周各个单曲的销量请给出每周的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 <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <queue>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <stack>
#include <deque>
#include <vector>
#include <set>
#include <map>
using namespace std;
#define MAXN 150
struct node{
    char name[50];
    int rank;
    int sum;
    int vis;
	int f;
}a[MAXN];;

struct node1{
    char name1[50];
    int rank1;
    int sum1;
	int prank;
	int f1;
}b[MAXN];

bool cmp(node a,node b){
    return a.sum > b.sum;
}

bool cmp1(node1 a,node1 b){
    return a.sum1 > b.sum1;
}

int main(){
    int i;
    for(i=0;i<MAXN;i++){
        a[i].sum = 0;
		a[i].rank = 99999;
        b[i].sum1 = 0;
        a[i].vis = 0;
		a[i].f = 0;
		b[i].f1 = 0;
    }
    int n;
    int count = 1;
    int fcount = 0;
    char fname[50];
    int fsum;
    int j = 0;
    int flag;
    int k;
    
    while(~scanf("%d",&n)){
        if(n == 0){
            break;
        }
        if(count == 1){
            for(i=0;i<n;i++){
                scanf("%s",a[i].name);
                scanf("%d",&a[i].sum);
                fcount++;
            }
            sort(a,a+n,cmp);
            printf("----------------WEEK 1----------------\n");
            for(i=0;i<5;i++){
                printf("%d.",i+1);
                printf("*NEW*   ");
                printf("%s\n",a[i].name);
                a[i].rank = i+1;
            }
            for(i=5;i<n;i++){
                a[i].rank = 999999;
            }
            count++;
        }
        else{
            k = 0;
            for(i=0;i<n;i++){
                flag = 0;
                scanf("%s",fname);
                for(j=0;j<fcount;j++){
                    if(strcmp(fname,a[j].name)==0){
                        a[j].vis  = 1;
                        scanf("%d",&fsum);
                        a[j].sum = fsum;
                        flag = 1;
                        break;
                    }
                }
                if(flag == 0){
                    a[fcount].vis = 1;
                    strcpy(a[fcount].name,fname);
                    scanf("%d",&a[fcount].sum);
					a[fcount].f = 1;
                    fcount++;
                }
            }
			//sort(b,b+k,cmp1);
            for(i=0;i<fcount;i++){
                if(a[i].vis == 1){
                    b[k].sum1 = a[i].sum;
					b[k].f1 = a[i].f;
                    strcpy(b[k].name1,a[i].name);
                    b[k].prank = a[i].rank;
                    k++;
                }
            }
            sort(b,b+k,cmp1);
			printf("----------------WEEK %d----------------\n",count);
            for(i=0;i<5;i++){
                //printf("----------------WEEK %d----------------\n",count);
				if(b[i].f1 == 1){
					printf("%d.",i+1);
					printf("*NEW*   ");
					printf("%s\n",b[i].name1);
				}
				else{
					if(i+1 == b[i].prank){
						printf("%d.",i+1);
						printf("*STAY*  ");
						printf("%s\n",b[i].name1);
					}
					else if(i+1 < b[i].prank){
						printf("%d.",i+1);
						printf("*UP*    ");
						printf("%s\n",b[i].name1);
					}
					else if(i+1 > b[i].prank){
						printf("%d.",i+1);
						printf("*DOWN*  ");
						printf("%s\n",b[i].name1);
					}
				}
                
            }
            for(i=0;i<5;i++){
                b[i].rank1 = i+1;
            }
			for(i=5;i<k;i++){
				b[i].rank1 = 99999;
			}
            for(i=0;i<fcount;i++){
                a[i].rank = 999999;
            }
            for(i=0;i<5;i++){
                for(j=0;j<fcount;j++){
                    if(strcmp(b[i].name1,a[j].name)==0){
                        a[j].rank = b[i].rank1;
                    }
                }
            }
            for(i=0;i<fcount;i++){
                a[i].vis = 0;
				a[i].f = 0;
            }
            count++;
        }
    }
    
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值