• 排行榜


    排行榜

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 45  解决: 14
    [提交][状态][讨论版]

    题目描述

    小迈克尔住在一个小镇上,他喜欢看每周日下午发布的音乐电视评比。它每周都根据选票介绍相同的歌曲,列出这些歌曲的流行排行榜。
    有一个星期日迈克尔和他的朋友在一起玩得太久了以致于未能看到新的流行榜。他非常失望,但是不久他就发现下周至少可以部分地建立出流行榜。除了每首歌曲的 位置,排行榜还根据这些歌曲上周的排行列出了它们排行变动的信息,更精确地说,从这周起,不管那首歌是继续排在原位,还是排名上升或排名下降,都会给出一 点说明。
    编写程序,根据给定的流行榜帮助迈克尔推断出上周可能的排行榜。

    输入

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

    输出

    用N行输出一个上周可能的排行榜。
    每一行包含一首歌名,即第i行包含排行榜上第i首歌的歌名。
    注意:解不必是唯一的,但对于每一个测试数据都至少有一个解。

    样例输入

    5
    HIGHHOPES
    UP
    LOWFEELINGS
    UP
    UPANDDOWN
    DOWN
    IAMSTILLSTANDING
    DOWN
    FOOLINGAROUND
    DOWN
    

    样例输出

    UPANDDOWN
    IAMSTILLSTANDING
    FOOLINGAROUND
    HIGHHOPES
    LOWFEELINGS
    【分析】先排位置不变的,再排下降的,再排上升的
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include<functional>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pi acos(-1.0)
    using namespace std;
    typedef long long ll;
    const int N=105;
    const int M=150005;
    int vis[N];
    int id[N];
    map<string,int>q;
    map<int,string>p;
    int n,m,x=1;
    int ans,maxn=0,sum=0;
    struct man {
        string name;
        string change;
    } a[N];
    int dp[N];
    int main() {
        scanf("%d",&n);
        for(int i=1; i<=n; i++) {
            cin>>a[i].name>>a[i].change;
            if(a[i].change=="SAME")q[a[i].name]=i,p[i]=a[i].name,vis[i]=1;
        }
        for(int i=1; i<=n; i++) {
            if(a[i].change=="DOWN") {
                for(int j=x;; j++) {
                    if(!vis[j]) {
                        q[a[i].name]=j;
                        p[j]=a[i].name;
                        vis[j]=1;
                        x++;
                        break;
                    }
                }
            }
        }
        for(int i=1; i<=n; i++) {
            if(a[i].change=="UP") {
                for(int j=x;; j++) {
                    if(!vis[j]) {
                        q[a[i].name]=j;
                        p[j]=a[i].name;
                        vis[j]=1;
                        x++;
                        break;
                    }
                }
            }
        }
        for(int i=1;i<=n;i++)cout<<p[i]<<endl;
        return 0;
    }
    View Code

  • 相关阅读:
    cookie和session的区别和用法
    JavaScript深浅拷贝
    前端知识
    typescript -- ts
    vue笔记精华部分
    宜人贷项目里-----正则匹配input输入月份规则
    PHP-Socket-阻塞与非阻塞,同步与异步概念的理解
    PHP socket客户端长连接
    PHP exec/system启动windows应用程序,执行.bat批处理,执行cmd命令
    查看局域网内所有ip
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/5771249.html
Copyright © 2020-2023  润新知