1 条题解

  • 0
    @ 2025-8-24 22:11:00

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 叫我DJ
    这个家伙很勤快,但还是什么也没有留下

    搬运于2025-08-24 22:11:00,当前版本为作者最后更新于2019-07-14 19:17:27,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    新鲜的题!!!

    先用链表存储每一个编号的数前一个和后一个数的编号,最后由大到小枚举一遍,将没有用过的点连上后一个一起输出(注意它能输出,当且仅当它后面有数)

    输出以后记得把它前一个数和它后面的后面的数连上

    然后,就可以上代码了

    #include <cstdio>
    
    int n,a[100001],k[100001],x[100001],i;
    
    int main()
    {
    	scanf("%d",&n);
    	for(i=1;i<=n;++i){
    		scanf("%d",&a[i]);
    		k[a[i-1]]=a[i];
    		x[a[i]]=a[i-1];}
    	for(i=n;i>=1;--i)
    		if(k[i])printf("%d %d ",i,k[i]),k[x[i]]=k[k[i]],x[k[x[i]]]=x[i],k[k[i]]=0;
    	return 0;
    }
    
    • 1

    信息

    ID
    4431
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者