掲示板题解

传送门

题意分析

将第 $ 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;
}
posted @ 2023-10-07 20:44  江州司马青衫湿  阅读(47)  评论(0)    收藏  举报