zoukankan      html  css  js  c++  java
  • CF1455D Sequence and Swaps 题解

    因为要求 $a_i>x$ 才可以交换,而序列要求 $a_{jin[i+1,n]}geq a_i$ ,所以如果有 $a_i>x$ 而不交换,那么后面都不能交换了。因此可以直接从前往后扫,遇到 $a_i>x$ 就交换。

    但是显然有序的数列是不用处理的,那么我们只需要处理到最后一个乱序的位置即可。可以先遍历一遍序列,找到最后一个乱序的位置,然后就按上面的方法处理,到那个位置就停止。然后再遍历一遍判断是否有序即可,此时若仍然无序则无解。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int N=700;
    int T,n,x,ans,b;
    int a[N];
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&x);b=ans=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                if(a[i]<a[i-1])
                    b=i;//最后一个乱序的位置
            }
            if(b)
            {
                for(int i=1;i<=b;i++)
                    if(x<a[i])
                        swap(x,a[i]),ans++;//遍历 [1,b] 并处理
                for(int i=1;i<=n;i++)
                    if(a[i]<a[i-1])
                        b=0;//仍然乱序
                printf(!b?"-1
    ":"%d
    ",ans);
            }
            else//有序
                puts("0");
        }
        return 0;
    }
     
  • 相关阅读:
    python实现Linux启动守护进程
    多维监控体系
    python 设计模式
    markdown安装和使用
    cobbler深入学习
    cobbler重装、web、定制化
    cobbler工作流分析
    cobbler安装、部署、测试
    Django中Celery的实现介绍(一)
    centos 搭建git服务器
  • 原文地址:https://www.cnblogs.com/TEoS/p/14074880.html
Copyright © 2011-2022 走看看