• 夜莺之歌(猜测名次)


    请小伙伴们对自己AC的题目进行标记,注意每人只能标记一次!不知道的不要标记,恶意标记者将回收账号!!!

    问题 E: 夜莺之歌

    时间限制: 2 Sec  内存限制: 128 MB  Special Judge
    [提交] [状态]

    题目描述

    小W酷爱鸟类,尤其喜欢鸟儿婉转的歌声。
    这天夜里,夜莺的歌声又吸引住了小W。由于长期的观察,小W已经能轻松地辨别出每只夜莺,并且给每只鸟儿都起了个只有英文字母的名字。夜莺歌声婉转,每只鸟在小W心中都有一个排名,排名是互不相同的。这次聆听后,小W心中的排名会发生一些变化。
    具体地,对于一只夜莺,如果小W觉得DOWN了,就说明对她歌声的好感度就下降了,即排名下降了;如果觉得UP,则好感度上升,即排名上升了;如果是SAME,好感度不变,排名也仍然不变。
    现在小W给了你现在的排名情况和这次聆听好感度的变化,他想让你猜一猜上一次的排名情况。由于情况众多,输出任何一种可能的排名情况都是允许的。

    输入

    第一行输入一个正整数n,表示夜莺的数目。
    接下来n组输入,第一行为夜莺的名称,第二行为其排名的变化,UP表示升高,DOWN表示降低,SAME表示没有变化。注意,输入越靠前,排名越高。

    输出

    一共n行,每行一个字符串,表示为上次可能的排名。

    样例输入 Copy

    3
    MISTIA
    UP
    XIAOSUIGU
    SAME
    LORELEI
    DOWN
    

    样例输出 Copy

    LORELEI
    XIAOSUIGU
    MISTIA
    

    提示

    样例解释
    原先的排名从高到低为:LORELEI、XIAOSUIGU、MISTIA
    现在的排名从高到低为:MISTIA、XIAOSUIGU、LORELEI
    可见LORELEI的排名降低了,为DOWN;MISTIA的排名升高了,为UP;XIAOSUIGU的排名没有变,为SAME。符合输入。

    对于30%的数据:n≤10。
    对于60%的数据:n≤1000。
    对于另外10%的数据:1≤n≤50000且所有排名信息第二行均为SAME。
    对于100%的数据:1≤n≤50000,每只鸟儿的名字均由不超过100个大写英文字母组成
    保证数据至少有一组解。
    解析:
    首先SAME的要保持原位置
    然后再让UP的都排在DOWN的后面
    因为他只要其中一种
    #pragma GCC optimize(2)
    #include<bits/stdc++.h> 
    #include <math.h>
    using namespace std;
    typedef long long ll; 
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int maxn=5e4+100;
    const int inf=0x3f3f3f3f;
    const int mod=1e9+7;
    struct node{
        char name[110];
        char p[10];
        int flag;
    }a[maxn];
    struct node1{
        char v[110];
    }t[maxn];
    int b[maxn];
    int n;
    void inint(){
        cin>>n;
        for(int i=1;i<=n;i++){
            scanf("%s",a[i].name);
            getchar();
            scanf("%s",a[i].p);
            getchar();
            if(a[i].p[0]=='S'){
                strcpy(t[i].v,a[i].name);
                a[i].flag=1; 
            } 
        }
    }
    int main(){
        inint();
        int j=1;
        int p=0;//统计D和U 
        for(int i=1;i<=n;i++){
            if(a[i].p[0]=='D'){
                if(a[j].flag==1){
                    j++;
                }
                strcpy(t[j].v,a[i].name);
                j++;
                p++;
            }
        }
        for(int i=1;i<=n;i++){
            if(a[i].p[0]=='U'){
                if(a[j].flag==1){
                    j++;
                }
                strcpy(t[j].v,a[i].name);
                j++;
                p++;
            }
        }
        int z;
        if(p==0){
            for(int i=1;i<=n;i++){
                printf("%s
    ",t[i].v);
            }
        }
        else{
            for(int i=1;i<j;i++){
                printf("%s
    ",t[i].v);
            }
        }
    }
  • 相关阅读:
    ElasticSearch7.6学习使用及问题总结
    phpstorm2020.1破解及使用
    大规模网站开发技术
    备份数据库、恢复数据库、定时
    Centos7系统tmp目录下文件默认保留时长
    linux删除指定文件夹中某个文件除外的其他文件
    python resource模块使用
    python logging 日志轮转文件不删除问题的解决方法
    linux 常用命令快捷键
    shell学习笔记(4)
  • 原文地址:https://www.cnblogs.com/lipu123/p/12839836.html
Copyright © 2020-2023  润新知