ZROI2018提高day3t1

传送门

分析

我们可以用贪心的思想。对于所有并没有指明关系的数一定是将小的放在前面。于是我们按顺序在每一个已经指明大小顺序的数前面插入所有比它小且没有指明关系的数。详见代码。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int ans[100100],a[100100],is[100100],last=0,cnt;
int main(){
      int n,m,i,j,k;
      scanf("%d%d",&n,&m);
      for(i=1;i<=m;i++){
          scanf("%d",&a[i]);
          is[a[i]]=1;
      }
      j=1;
      while(j<=m){
          for(k=last+1;k<=n;k++)
            if(k<a[j]){
                last++;
                if(!is[k])ans[++cnt]=k;
            }else {
                ans[++cnt]=a[j];
                break;
            }
          j++;
      }
      for(i=last+1;i<=n;i++)
        if(!is[i])ans[++cnt]=i;
      for(i=1;i<=n;i++)printf("%d\n",ans[i]);
      return 0;
}

猜你喜欢

转载自www.cnblogs.com/yzxverygood/p/9649871.html