队列Q (wannfly_19) (数组模拟)

传送门

参考答案

堕落很多很多天了,今天良心发现,我固然知道堕落很容易,也很开心,的确,那个斗罗大陆的确很好看,

但是,我也要节制一下,现在都已经是考试周,我还在看小说真的说不过去了,要是挂科了就真的得不偿失了。


做一下水题,调节一下自己,因为还有一个周时间给我调节,

然后就是恐怖的每天训练。其实训练不能说不累,

但是心里压力很大,来年就是大二了,要是自己能力不提升上去那么很多东西都没法玩了。

学一门新的语言,真的,有时候C/C++解决的问题真的非常有限,但是更多的东西在乎自己去学,

而不是让老师逼着自己去学,就好比高考,要不是真的意识到自己未来的大学对自己的影响,

我也不至于到现在一样,其实也不能强求,我真的有点想明白为什么自己不如别人,

人家每天都是在不断地提升,而自己看别人好的,却不懂得竞争,有多少个假期给自己堕落掉了。

但是这个暑假,我就不能再堕落,我已经做好准备了,

我知道,恐怖的40天来,会有无数的比赛,自己在每天的内疚中度过,

我知道很多同年级的同学比自己强,但是我只要在跑,哪怕追不上,我也要迈出属于自己的第一步,

有很多的题要补,但是不懂就去问问别人,多学几个算法,哪怕是最基础的,都要一步一步跟着走。

时间真的不多了,我知道看一天小说真的不错,自己脑补不同的打斗场面,

唐三升级打怪,但是自己也要向唐三学习学习呀,千里之行,始于足下。


题意:很明白,就是给了N个数,对于某一个数进行操作。

First         把某一个数放在最前面。

Last         把某一个数放在最后面。

最后把这个数输出来即可。


想法:

其实很简单,首先需要两个数组,第一个数组记录每一个数的对应的值。--A[]

另外的一个数组则记录他们之间的相对位置,            ---    B[]

只要    输入First 时把对应的元素放在第一,则对  B[        A []     ]      =F--;

                                                                     反之    B[       A[]        ]    =L++;

最后输出即可:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+100;
    int a[maxn],b[maxn];
    bool cmp(int x,int y){
        return b[x]<b[y];
    }
    int main()
    {
        int n,m;
        char s[1000]={0};
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            b[a[i]]=i;
        }
        scanf("%d",&m);
        getchar();
        int F=-1,L=n+1;
        while(m--){
            cin.getline(s,sizeof(s));
            char ins[100];
            int x;
            sscanf(s,"%s %d",ins,&x);
            if(ins[0]=='F'){
                b[x]=F--;
            }else if(ins[0]=='L'){
                b[x]=L++;
            }
        }sort(a,a+n,cmp);
        for(int i=0;i<n;i++){
            printf("%d%c",a[i],i==n-1?'\n':' ');
        }
        return 0;
    }

猜你喜欢

转载自blog.csdn.net/z_sea/article/details/80957465