掲示板题解

发布时间 2023-10-07 20:49:09作者: 江州司马青衫湿
[传送门](https://www.luogu.com.cn/problem/AT1409)

题意分析
-----------
将第 $i$ 个数提到第一个并输出,也就是倒着扫并输出。倒数第一成为第一,倒数第二成为第二,以此类推,输出该数后标记,最后再枚举一遍,如果没有输出就将它们按正序输出。

思路
------------
定义一个 bool 数组,记录输出与否,如果它为 false 就把它改为 true 且将它输出,下次就不用输出了。然后再从头至尾扫一遍,如果没有输出就将它输出并换行。

```
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int n,m,a[100005];//根据题意定义
bool s[100005];//初始值为false
int main()
{
    scanf("%d%d",&n,&m);//输入
    for(int i=1;i<=m;i++)
      scanf("%d",&a[i]);//输入
    for(int i=m;i>=1;i--)//倒序枚举
    {
        if(!s[a[i]])//没有输出
        {
            s[a[i]]=true;//标记
            printf("%d\n",a[i]);//切记要换行!!!            
        }
    }
    for(int i=1;i<=n;i++)//寻找没有输出的
    {
        if(s[i]==true)
          continue;//判断
        printf("%d\n",i);//换行!!!
    }
    return 0;
}
```

该题解借鉴了本题题解中许多大佬的思路,
下面列出几位大佬:
@olkieler,@MZY666,@Harry27182,
集合大佬的思路,加入自己的风格和理解,写出了一篇自认为蒟蒻可以看懂的题解。

最后弱弱地说一下:

这是蒟蒻的第一篇题解,不好请私信。

求 daolao 勿喷!!