波动序列解题报告
来源:互联网 发布:杭州php招聘 编辑:程序博客网 时间:2024/04/30 00:58
描述:有一个长度为N 的整数序列,序列里面的数是两两不同的,现在要在里面
找一个波动序列,这个序列越长越好。
比如有波动序列{a0,a1,a2…an},则a0 > a1 < a2 > a3 <…
输入输出要求:
Input
第一行输入一个数T,代表有T 个任务,T 不大于50。
对于每个任务,输入格式为
N a0 a1 a2 … aN
其中N<=30000,测试数据保证序列的数两两不同。
Output
对于每个任务,输出最长的波动序列长度
输入输出样例:
Sample Input
4
5 1 2 3 4 5
5 5 4 3 2 1
5 5 1 4 2 3
5 2 4 1 3 5
Sample Output
1
2
5
3
解题思路:由题得,波动序列第一个数必须比第二个数大,所以先找到第一个比它后一个数大的数的下标,然后从这个数往后一个个比较,用一个标记变量flag记录状态,flag为0时,后一个数要比前一个数小,flag为1时,后一个数要比前一个数大。每满足一次条件,answer便自加一,最后输出结果。
代码:
#include<stdio.h>
int num[30005];
int main()
{
intT;
scanf("%d",&T);
while(T--)
{
intN;
inti;
intpos=0;
intflag=0;
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%d",&num[i]);
intcount=1;
for(i=1;i<N;i++)
if(num[i]<num[i-1])
{
pos=i-1;
break;
}
for(i=pos;i<N-1;i++)
{
if(((flag==0)&&(num[i+1]<num[i]))||((flag==1)&&(num[i+1]>num[i])))
{
count++;
flag=(flag+1)%2;
}
}
printf("%d\n",count);
}
return0;
}
解题感想:再次被测试样例坑了,一直以为波动序列要连续才可以,断掉了就要重新记录。从测试样例根本看不出波动序列是不是连续的,而我一直当成要连续,所以样例过了,但是一直WA。后来才知道不要求连续,这样问题就简单了好多,从头一个个比较就好了。
- 波动序列解题报告
- 波动数列 解题报告
- 【序列长度】解题报告
- 字符序列 解题报告
- [Hnoi2016]序列 解题报告
- 序列和解题报告
- CCF 201609-1 最大波动 解题报告 简单模拟
- 波动序列
- 波动序列
- 波动序列
- TYVJ1193 括号序列解题报告
- UVA1423 猜序列 解题报告
- 第五届蓝桥杯C/C++本科A组初赛波动数列解题报告
- 【最大子序列和】解题报告
- [CODEVS1283]等差子序列解题报告
- 解题报告:乘积最大子序列
- foj 2170 花生壳的序列 解题报告
- [bzoj3744]Gty的妹子序列 解题报告
- Lucene评分机制
- 简单有效-禁止其他人到你电脑上用QQ
- /etc/ld.so.conf
- bss,data,rodata,text
- 使用jquery获取url以及jquery获取url参数的方法
- 波动序列解题报告
- 线程池原理分析
- Hdu 1907 John
- 最近用htmlunit做网络爬虫 遇到拿不到初始化js加载的数据的问题 最近解决了 写个简单的例子
- Linux平台下线程池的原理及实现
- 破除BC上的制度限制
- POI导出Excel 含一维码图片
- MyBatisMap传入数据错误解决
- kmp算法