【吐槽】:本来没打算写这题的题解的,但惨不忍睹得WA了13次,想想还是记录一下吧。自己的“分类讨论能力”本来就很差。

刚开始第一眼扫过去以为是LIS,然后忽略了复杂度,果断TLE了,说起来也好惭愧,也说明有时候太懒得动脑了,总是习惯利用惯性思维,这不是一件好事。

【题意】:给你大小为n的整型数组a[n],求这数组的一个子串,其中最多可以修改子串中的一个数字,使得到的子串是最长的严格递增的子串,输出该子串的长度 L。

【思路】:O(n)复杂度,枚举断点情况。第0个和第n个位置默认为断点。(用ve[i]表示第 i 个断点在a[n]中的下标位置)

1、断点 ve[i] 可更改,即断点两端数的差值大于1时,L 为前一个断点到后一个断点的距离,即 L = ve[i+1]-ve[i-1]。

2、断点 ve[i] 不可更改,则这里又分两种情况:①由于从断点开始左右两侧分别是严格递增的,所以如果 a[ve[i]] - a[ve[i]-2] > 1,则表示 a[ve[i]-1] 可修改,

                      使得断点前后两段可以结合,L = ve[i+1]-ve[i-1]。

                      ②如果不满足①的情况,则取 ve[i]-ve[i-1] 和 ve[i+1]-ve[i] 中的较大值。

下面是AC代码:

代码下是测试数据

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std; #define maxn 100006
int ant[maxn];
int main()
{
int n;
while(scanf("%d", &n) != EOF){
vector<int> ve; ve.push_back();
scanf("%d", &ant[]);
for(int i = ; i < n; i++){
scanf("%d", &ant[i]);
if(ant[i]-ant[i-] <= ) { ve.push_back(i);}
}
ant[n] = -;
ve.push_back(n); int l = ve.size();
int m, res = -; if(l > )
for(int i = ; i < l-; i++){
if(ant[ve[i]+] - ant[ve[i]-] > ){
m = ve[i+] - ve[i-];
}
else if(ve[i-] != ve[i]-){
if(ve[i] > &&ant[ve[i]]-ant[ve[i]-] > ) m = ve[i+]-ve[i-];
else if(ve[i]-ve[i-] > ve[i+]-ve[i]) m = ve[i]-ve[i-]+;
else m = ve[i+]-ve[i]+;
}
else { m = ve[i+]-ve[i-];} if(m > res) res = m;
}
else res = n; printf("%d\n", res);
}
}
/*
input:
11
7 2 6 4 3 1 8 10 24 31 25
6
7 2 3 1 5 6
9
1 3 3 4 4 5 5 6 6
5
1 3 2 5 4
11
7 2 6 4 3 3 8 10 24 31 25
10
1 3 2 2 4 6 9 3 7 2
50
804289384 846930887 681692778 714636916 957747794 424238336 719885387 649760493 596516650 189641422 25202363 350490028 783368691 102520060 44897764 967513927 365180541 540383427 304089173 303455737 35005212 521595369 294702568 726956430 336465783 861021531 59961394 89018457 101513930 125898168 131176230 145174068 233665124 278722863 315634023 369133070 468703136 628175012 635723059 653377374 656478043 801979803 859484422 914544920 608413785 756898538 734575199 973594325 149798316 38664371
10
424238336 649760493 681692778 714636916 719885387 804289384 846930887 957747794 596516650 189641422
10
1 2 3 4 5 5 6 7 8 9
5
1 1 1 1 1
5
1 1 2 3 4
6
7 2 3 1 4 5
4
1 4 3 4
5
0 1 4 3 4 output:
6
5
3
4
6
5
19
9
6
2
5
4
4
5
*/

CF#FF(255)-div1-C【水题,枚举】的更多相关文章

  1. 洛谷P2038 无线网络发射器选址 水题 枚举

    刚开始边界写错了(将128写成127). 注意n <= 20,所以可以每读入一个点就将其周边更新,这样最多也只会有 40 * 40 * 20 种位置需要被枚举. Code: #include&l ...

  2. CF 277.5 A.SwapSort 水题

    //STL教你做人系列 #include<stdio.h> #include<iostream> #include<math.h> #include<algo ...

  3. CF 593B Anton and Lines(水题)

    题意是给你n条直线,和x1,x2;问 在x1,x2之间(不包括在x1,x2上) 存不存在任意两条线的交点. 说思路,其实很简单,因为给的直线的条数很多,所以无法暴力求每两条直线的交点,那么就求每条直线 ...

  4. CF 628B New Skateboard --- 水题

    CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...

  5. CF 628A --- Tennis Tournament --- 水题

    CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...

  6. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...

  7. 一道cf水题再加两道紫薯题的感悟

    . 遇到一个很大的数除以另一个数时,可以尝试把这个很大的数进行,素数因子分解. . 遇到多个数的乘积与另一个数的除法时,求是否能整除,可以先求每一个数与分母的最大公约数,最后若分母数字为1,则证明可整 ...

  8. 做了一道cf水题

    被一道cf水题卡了半天的时间,主要原因时自己不熟悉c++stl库的函数,本来一个可以用库解决的问题,我用c语言模拟了那个函数半天,结果还超时了. 题意大概就是,给定n个数,查询k次,每次查询过后,输出 ...

  9. CF451C Predict Outcome of the Game 水题

    Codeforces Round #258 (Div. 2) Predict Outcome of the Game C. Predict Outcome of the Game time limit ...

随机推荐

  1. 2.C#基础篇-->数据类型

    C#数据类型分为:值类型,引用类型和指针类型(仅在不安全代码中使用) 1.值类型. 值类型包含:简单类型(整型,浮点类型和小数类型),枚举类型和结构类型.所有值类型都隐含的声明一个公共的无参构造函数, ...

  2. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C - Bear and Colors

    题目链接: http://codeforces.com/contest/673/problem/C 题解: 枚举所有的区间,维护一下每种颜色出现的次数,记录一下出现最多且最小的就可以了. 暴力n*n. ...

  3. string为什么可以写入共享内存

    我今天在想这个vector,map为什么不能写入共享内存,原来是因为new的时候只是new了这个对象在共享内存上,而真正的堆上的内存并没有在共享内存里面的,如果要想vector 可以共享就要重写分配器 ...

  4. 使用JFinal-weixin配置微信开发

    先扯点闲话,申请好公众号后,一直因为没有域名.没有外网IP而没有尝试过开发微信服务.后来发现nat123可以从内网直接映射到外网,但是nat123需要钱或者T币大于0,于是为了赚一个T币,签到灌水了一 ...

  5. python抓取汇率

    # -*- coding: utf-8 -*- """ 获取实时汇率 Created on Fri Oct 18 13:11:40 2013 @author: alala ...

  6. 通过spring.net中的spring.caching CacheResult实现memcached缓存

    通过spring.net中的spring.caching CacheResult实现memcached缓存1.SpringMemcachedCache.cs2.APP.config3.Program. ...

  7. 手写PE文件(一)

    DOS Header(IMAGE_DOS_HEADER)->64 Byte DOS头部 DOS Stub 112字节 "PE"00(Signature) 4个字节 IMAGE ...

  8. C#中String 与Color之间的相互转换

    C#中String 与Color之间的相互转换 ————————————宋兴柱     其实,我们平常如果要在数据库存放Color类型值的话,肯定会在数据库中建立varchar类型.对吧.但是Colo ...

  9. 【面试题】Google of Greater China Test for New Grads of 2014总结

    2014年Google中国校园招聘采用在线技术笔试,在Code Jam平台上,14号9点到15号9点开放测试题,帮助大家熟悉环境.这个周末也有够忙的,当时就上去看了一下,把输入文件下了一下,今天才把题 ...

  10. 解高次同余方程 (A^x=B(mod C),0<=x<C)Baby Step Giant Step算法

    先给出我所参考的两个链接: http://hi.baidu.com/aekdycoin/item/236937318413c680c2cf29d4 (AC神,数论帝  扩展Baby Step Gian ...