掲示板题解
题意分析
将第 $ 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;
}

浙公网安备 33010602011771号