zoukankan      html  css  js  c++  java
  • 题解 CF27C 【Unordered Subsequence】

    思路:推理


    首先我们知道,如果一个数列长度 (lenle 2),那么这个数列肯定不是无序的,证明显然。

    题目中要求求最短的序列,那么只要题目有解,我们肯定能找到一个 (len=3) 的无序序列。

    对于这个题,有一种简便方法,就是只枚举 i ,如果这个序列是有解的,那么肯定能找到 (a[1],a[i],a[i+1]) 是无序的情况。

    证明一下:

    1. 如果(a[i]>a[i+1])
      1. 如果(a[1])是三者最大,呈降序,不符合条件,舍去。
      2. 如果(a[1])居中,满足“小大小”无序。
      3. 如果(a[1])是三者最小,同上。
    2. 如果(a[i]<a[i+1])
      1. 如果(a[1])是三者最大,满足“大小大”无序。
      2. 如果(a[1])居中,同上。
      3. 如果(a[1])是三者最小,呈升序,不符合条件,舍去。

    除了这些情况的,一定无解。

    代码奉上:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int N=100005;
    int a[N],n;
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		scanf("%d",&a[i]);
    	for(int i=2;i<n;i++) {//注意越界问题
    		if((a[i+1]>a[i]&&a[i]<a[1])||(a[i+1]<a[i]&&a[i]>a[1])) {
    			printf("3
    1 %d %d
    ",i,i+1);
    			return 0;//找到答案直接输出结束。
    		}
    	}
    	printf("0
    ");//非要无解我莫得办法
    	return 0;
    }
    
  • 相关阅读:
    会话:Cookie、Session
    Response:HTTP响应、重定向、验证码、ServletContext对象
    javabean 深拷贝
    条形码生成工具类
    java zxing 生成条形码和二维吗
    强大的httpClientUtils
    Java处理图片工具类
    生成二维码
    过滤掉map集合中key或value为空的值
    将异常堆栈信息转换成字符串
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/13429475.html
Copyright © 2011-2022 走看看