HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
Description
We say an array is sorted if its elements are in non-decreasing order or non-increasing order. We say an array is almost sorted if we can remove exactly one element from it, and the remaining array is sorted. Now you are given an array









,is it almost sorted?
Input
indicatingthe total number of test cases. Each test case starts with an integer
inone line, then one line with
integers 








. 



















There are at most 20 test cases with





.Output
Sample Input
3
3
2 1 7
3
3 2 1
5
3 1 4 1 5
Sample Output
YES
YES NO
在virtual judge上无意点了个开放的专题,竟然是区域赛的题,而且竟然是学长拉的题,奈何我这种大一菜鸟神马都不会,做那个求异或最大值的用三层for循环直接超时,题目明明规定的是9000ms,学长说现场赛的话还可以暴力过,但重现赛就没那么好过了,看到他们都A了这个题,于是也跟榜做做这个题;
题意并不难理解,只不过出题人喜欢拐弯抹角,两种状态:一种已经被排好序,我们就称之为标准态吧,另一种是只能移除一个而形成标准态;
我们来分析第一种标准态: 数组元素呈非递增或非递减态排布;注意这个“或”字,或非递增或非递减,即是说既可以是递增也可以是递减,出题人在这里卡了一下,不过,我相信对于能参加区域赛的大神来说并无障碍;
分析好了题意就可以想思路了,题目求的是给定一个数组,能否只移除一个元素使它变成标准态,这里还需要注意的是如果原数组就是标准态,那么不管移除哪个都仍是标准态;所以我们只需要考虑原数组屏蔽某个元素后是否是标准态即非单调递增或非单调递减的状态;说白了,就是求这个数组的非单调递增或非单调递减的元素个数(长度)是否为n或n-1(假设给定数组的长度为n);
所以用二分求出非单调递增和非递减的长度,可以有相等的,不一定是单调的,这里也是一个坑点;只需把二分算法中的大于改成大于等于就好了;
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=100000+10;
int a[N],b[N];
int s(int num,int l,int h)
{
int mid;
while(l<=h)
{
mid=(l+h)/2;
if(num>=b[mid])
l=mid+1;
else h=mid-1;
}
return l;
}
int dp1(int n)//求非单调递减的序列长度;下面同理;
{
int i,len,pos;
b[1]=a[1];
len=1;
for(i=2; i<=n; i++)
{
if(a[i]>=b[len])//可以等,下面同理;
{
len=len+1;
b[len]=a[i];
}
else
{
pos=s(a[i],1,len);
b[pos]=a[i];
}
}
return len;
}
int dp2(int n)
{
int i,len,pos;
b[1]=a[n];
len=1;
for(i=n-1; i>=1; i--)
{
if(a[i]>=b[len])
{
len=len+1;
b[len]=a[i];
}
else
{
pos=s(a[i],1,len);
b[pos]=a[i];
}
}
return len;
}
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=1; i<=n; i++)
scanf("%d",&a[i]); int x1=dp1(n);
int x2=dp2(n);
if(x1==n||x1==n-1||x2==n||x2==n-1)//等于n说明已经是标准态,否则可以移除一个;
printf("YES\n");
else
printf("NO\n");
// printf("%d %d\n",x1,x2);
}
return 0;
}
代码写出来也不是很难,关键就是我们分析题意,搞清思路,然后代码实现;
HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~的更多相关文章
- HDU 5532 / 2015ACM/ICPC亚洲区长春站 F.Almost Sorted Array
Almost Sorted Array Problem Description We are all familiar with sorting algorithms: quick sort, mer ...
- 2015ACM/ICPC亚洲区长春站 L hdu 5538 House Building
House Building Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- 2015ACM/ICPC亚洲区长春站 J hdu 5536 Chip Factory
Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- 2015ACM/ICPC亚洲区长春站 H hdu 5534 Partial Tree
Partial Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- 2015ACM/ICPC亚洲区长春站 G hdu 5533 Dancing Stars on Me
Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array
Almost Sorted Array Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Ot ...
- 2015ACM/ICPC亚洲区长春站 E hdu 5531 Rebuild
Rebuild Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b
Count a * b Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- 2015ACM/ICPC亚洲区长春站 A hdu 5527 Too Rich
Too Rich Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
随机推荐
- XON/OFF
#define XON 0x11#define XOFF 0x13查找ASCII码表,这两个对应的是DC1(设备控制1)和DC3(设备控制3) X/ON和X/OFF为开启和关闭发送器的信号.X /ON ...
- 拦截@RequestBody的请求数据
要拦截首先想到的是拦截器,@RequestBody只能以流的方式读取,流被读过一次后,就不在存在了,会导致会续无法处理,因此不能直接读流 为了解决这个问题,思路如下: 1.读取流前先把流保存一下 2. ...
- CF779B(round 402 div.2 B) Weird Rounding
题意: Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k. In the ...
- chrome inspect出现白屏的解决方案
点inspect后 弹出框,可是里面一片白色 PS:原效果不是这样,只是图找不到随便p的 原因可以看这个:http://www.cnblogs.com/slmk/p/7591126.html 大概意思 ...
- RecycleView的万能适配器
转载自http://www.cnblogs.com/liushilin/p/5720926.html 由于RecyclerView的Adapter必须继承自RecyclerView.Adapter,并 ...
- Oracle 11g r2 Enterprise Manager (EM) 中文页面调整为英文页面
Oracle 11g r2 Enterprise Manager (EM) 在中文语言环境下, 部分功能(如包含时间的查询数据库实例: orcl > 指导中心 > SQL 优化概要 ...
- mac及windows下安装ss实现***
官网下载shadowsock(mac/windows都是下面地址,页面会根据当前系统自动判断所下载的包) https://sourceforge.net/projects/shadowsocksgui ...
- SQL (一)定义变量以及变量赋值
1.定义变量:declare @name varchar(20) 用declare定义一个名字为name的字符串类型的变量,变量前面需要加@ 2.为变量赋值:set @name = '%奥迪%' , ...
- vijos 1772 巧妙填数
描述 将1,2,\cdots,91,2,⋯,9共99个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:31:2:3的比例. 试求出所有满足条件的三个三位数.例如:三个三位数192,384, ...
- Android(java)学习笔记176: 远程服务的应用场景(移动支付案例)
一. 移动支付: 用户需要在移动终端提交账号.密码以及金额等数据 到 远端服务器.然后远端服务器匹配这些信息,进行逻辑判断,进而完成交易,返回交易成功或失败的信息给移动终端.用户提交账号. ...