请小伙伴们对自己AC的题目进行标记,注意每人只能标记一次!不知道的不要标记,恶意标记者将回收账号!!!
题目描述
小W酷爱鸟类,尤其喜欢鸟儿婉转的歌声。
这天夜里,夜莺的歌声又吸引住了小W。由于长期的观察,小W已经能轻松地辨别出每只夜莺,并且给每只鸟儿都起了个只有英文字母的名字。夜莺歌声婉转,每只鸟在小W心中都有一个排名,排名是互不相同的。这次聆听后,小W心中的排名会发生一些变化。
具体地,对于一只夜莺,如果小W觉得DOWN了,就说明对她歌声的好感度就下降了,即排名下降了;如果觉得UP,则好感度上升,即排名上升了;如果是SAME,好感度不变,排名也仍然不变。
现在小W给了你现在的排名情况和这次聆听好感度的变化,他想让你猜一猜上一次的排名情况。由于情况众多,输出任何一种可能的排名情况都是允许的。
这天夜里,夜莺的歌声又吸引住了小W。由于长期的观察,小W已经能轻松地辨别出每只夜莺,并且给每只鸟儿都起了个只有英文字母的名字。夜莺歌声婉转,每只鸟在小W心中都有一个排名,排名是互不相同的。这次聆听后,小W心中的排名会发生一些变化。
具体地,对于一只夜莺,如果小W觉得DOWN了,就说明对她歌声的好感度就下降了,即排名下降了;如果觉得UP,则好感度上升,即排名上升了;如果是SAME,好感度不变,排名也仍然不变。
现在小W给了你现在的排名情况和这次聆听好感度的变化,他想让你猜一猜上一次的排名情况。由于情况众多,输出任何一种可能的排名情况都是允许的。
输入
第一行输入一个正整数n,表示夜莺的数目。
接下来n组输入,第一行为夜莺的名称,第二行为其排名的变化,UP表示升高,DOWN表示降低,SAME表示没有变化。注意,输入越靠前,排名越高。
接下来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个大写英文字母组成
保证数据至少有一组解。
原先的排名从高到低为: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); } } }