Codeforces Round #656 (Div. 3) 参与排名人数11542 早睡早起身体好
[codeforces 1385C] Make It Good 逆序寻找只包含一个峰的山
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.com/contest/1385/problem/C
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
C - Make It Good | GNU C++17 | Accepted | 61 ms | 4600 KB |
题目大意:给定一个数组a,若从头开始删除一些元素(删除的元素必须连续,也可以不删除元素),剩下的元素称为数组b,若只能从数组b的头或尾,不断的取出元素,组成数组c,注意,放入数组c的元素,按自b中取出元素的先后顺序排列,若能找到一个非递减序列的数组c,那么,数组b称之为好序列,要求删除数组a中的元素尽可能少。
基本思路:模拟样例发现,只包含一座山峰的山,是一个好的数组。
样例模拟如下:
4
1 2 3 4
0
位置1 2 3 4
数值1 2 3 4
峰
很明显,逆序,只包含一座山峰的山对应位置区间[1,4]
7
4 3 3 8 4 5 2
4
位置1 2 3 4 5 6 7
数值4 3 3 8 4 5 2
峰 峰
很明显,逆序,只包含一座山峰的山对应位置区间[5,7]
逆序寻找,找到第二个峰所在位置4(对应数值是8),输出4
3
1 1 1
0
位置1 2 3
数值1 1 1
峰
很明显,逆序,只包含一座山峰的山对应位置区间[1,3]
7
1 3 1 4 5 3 2
2
位置1 2 3 4 5 6 7
数值1 3 1 4 5 3 2
峰 峰
很明显,逆序,只包含一座山峰的山对应位置区间[3,7]
逆序寻找,找到第二个峰所在位置2(对应数值是3),输出2
5
5 4 3 2 3
3
位置1 2 3 4 5
数值5 4 3 2 3
峰 峰
很明显,逆序,只包含一座山峰的山对应位置区间[4,5]
逆序寻找,找到第二个峰所在位置3(对应数值是3),输出3
AC代码如下:
#include <stdio.h>
#define maxn 200010
int a[maxn];
int main(){
int t,n,i,cnt,flag;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
cnt=0,flag=0,a[0]=-1;
for(i=n;i>=1;i--)
if(a[i-1]<a[i])cnt=1;//找到第一座山峰
else if(cnt&&a[i-1]>a[i]){printf("%d\n",i-1);flag=1;break;}//找到第二座山峰
if(!flag)printf("0\n");//没有找到第二座山峰
}
return 0;
}
类似题目: