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;
    }
     
  • 相关阅读:
    linux挂载ntfs格式的U盘
    linux tar命令
    chown chmod chgrp chattr chroot usermod 命令简单分析
    UI/UE/ID/UED/UCD的区别(转)
    搭建 Docker Swarm 集群
    端口
    linux crontab 定时任务
    centos8 安装 docker
    history 用法大全
    PHP生成正则表达式的类
  • 原文地址:https://www.cnblogs.com/TEoS/p/14074880.html
Copyright © 2011-2022 走看看