洛谷P1159 排行榜

题目描述

小迈克尔住在一个小镇上,他喜欢看每周日下午发布的音乐电视评比。它每周都根据选票介绍相同的歌曲,列出这些歌曲的流行排行榜。

有一个星期日迈克尔和他的朋友在一起玩得太久了以致于未能看到新的流行榜。他非常失望,但是不久他就发现下周至少可以部分地建立出流行榜。除了每首歌曲的位置,排行榜还根据这些歌曲上周的排行列出了它们排行变动的信息,更精确地说,从这周起,不管那首歌是继续排在原位,还是排名上升或排名下降,都会给出一点说明。

编写程序,根据给定的流行榜帮助迈克尔推断出上周可能的排行榜。

输入格式

第一行是一个整数 𝑁(1≤𝑁≤100)N(1≤N≤100),表示排行榜上歌曲的总数。

接下来的 𝑁N 块列出了排行信息。每块有两行组成,第i块第一行是第 𝑖i 首歌曲的名称,歌名包括最多不超过 100100 个英文大写字母,第二行包含下列三个单词中的一个:UP(歌曲在排行榜上的位置上升),DOWN(歌曲在排行榜上的位置下滑)或 SAME(排行不变),表示与上周排行榜相比,排行榜所发生的变动。

输出格式

𝑁N 行输出一个上周可能的排行榜。

每一行包含一首歌名,即第 𝑖i 行包含排行榜上第 𝑖i 首歌的歌名。

注意:解不必是唯一的,但对于每一个测试数据都至少有一个解。

输入输出样例

输入 #1

5
HIGHHOPES
UP
LOWFEELINGS
UP
UPANDDOWN
DOWN
IAMSTILLSTANDING
DOWN
FOOLINGAROUND
DOWN

输出 #1

UPANDDOWN
IAMSTILLSTANDING
FOOLINGAROUND
HIGHHOPES
LOWFEELINGS
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,up[110],down[110],ans[110];
int uhead,utail,dhead,dtail;
string s[110];
int main()
{
    scanf("%d",&n);
    string c;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        cin>>c;
        if(c[0]=='U') up[++utail]=i;
        else if(c[0]=='D') down[++dtail]=i;
        else ans[i]=i;
    }
    for(int i=1;i<=n;i++){
        if(ans[i]) continue;
        if(dhead<dtail) ans[i]=down[++dhead];
        else ans[i]=up[++uhead];
    }
    for(int i=1;i<=n;i++)
     cout<<s[ans[i]]<<endl;
    return 0;
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值