zoukankan      html  css  js  c++  java
  • CF #335 div1 A. Sorting Railway Cars

    题目链接:http://codeforces.com/contest/605/problem/A

    大意是对一个排列进行排序,每一次操作可以将一个数字从原来位置抽出放到开头或结尾,问最少需要操作多少次可以将原排列变为有序。

    一个比较很想当然的算法是用长度减去最长上升子序列,但这是错误的。

    反例:

    5

    1 3 4 5 2

    按照n-lis,会得出答案1,但显然这是做不到的,答案应是2

    正解应当是考虑最终变为有序时,所有未经操作的数字,应当是连续的。所以要使得操作次数最少就要求在原来数列中位置递增的最长连续数段。

    以上面为例,则3 4 5这3个连续数字组成的数段满足在原来数列中位置递增,且是最长的数段。

    代码如下:

     1 readInts=lambda: list(map(int, input().split()))
     2 n=int(input())
     3 a=readInts()
     4 p=[0]*n
     5 for i in range(n):
     6     p[a[i]-1]=i
     7 inc=1;ret=n-1
     8 for i in range(1,n):
     9     if p[i]>p[i-1]:
    10         inc+=1
    11     else:
    12         inc=1
    13     ret=min(ret,n-inc)
    14 print(ret)
  • 相关阅读:
    java简单实现MD5加密
    Java用freemarker导出Word 文档
    java 反射(*)
    java解析XML
    JDBC程序实例
    web前端开发-博客目录
    虚拟主机配置
    WAMP运行原理
    WAMP配置
    web前端性能优化总结
  • 原文地址:https://www.cnblogs.com/micrari/p/5393844.html
Copyright © 2011-2022 走看看