揭示板题解

· · 题解

各位神犇的实力让我敬佩不已,本蒟蒻也来谈一下这道题的做法(各位大佬轻喷):

首先明确一下思路,这道题我们不必用算法等来做。只需要一些巧妙(投机取巧)的想法。
1.把这n个数倒序存储在数组里,按样例3来看就是10,9,8,7...这样。
2.依次输入m个要提前的数。
3.在2.的同时要顺便把输入的数存到数组的末尾,相当于一个push操作。操作后将该数在原数组中的位置标记,到输出是直接忽略(具体操作见代码)
4.把修改完后的数组倒序输出,就是答案

(不理解的看代码,码风很丑,大佬们见谅)

现在是大家最喜爱的code:

#include<bits/stdc++.h>
using namespace std;
int a[200001],b[100001];//b数组用来检测某个数是否已经输出过
int main()
{
      int n,m,k;
      cin>>n>>m;
      for(int i=1;i<=n;i++)
      {
          a[i]=n-i+1;//倒序存储
      }
      for(int i=1;i<=m;i++)
      {
          cin>>k;
          a[++n]=k;//在数组末尾添加这个要提前的数,因为是倒序存储,所以该操作等价于将该数提前
      }
      for(int i=n;i>=1;i--)
      {
          if(!b[a[i]])//如果还没有输出过,证明这个数操作最后的位置在当前位置,输出
          {
              cout<<a[i]<<endl;
              b[a[i]]=1;//做好标记
          }
          else
          {
              continue;
          }
      }
      return 0;
}