波动序列解题报告
2013-07-17 17:53
211 查看
描述:有一个长度为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。后来才知道不要求连续,这样问题就简单了好多,从头一个个比较就好了。
找一个波动序列,这个序列越长越好。
比如有波动序列{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。后来才知道不要求连续,这样问题就简单了好多,从头一个个比较就好了。
相关文章推荐
- Leetcode 376. Wiggle Subsequence 摇摆序列 解题报告
- CodeVS3657 括号序列 解题报告【区间DP】
- 习题2-4 字序列的和 解题报告
- 解题报告 最小波动
- codevs 2622 数字序列 DP 解题报告
- POJ 2806 公共子序列 解题报告
- 字符序列 解题报告
- 一中OJ #1453 马棚问题 | 动态规划 序列分组DP | 解题报告
- SDUT 3648 迷の有序序列 (动态规划) -- 解题报告
- 2018.2.21【 UVa - 1584 】解题报告(紫书例题,环状序列,字典序)
- cojs QAQ的序列 解题报告
- 一中OJ #1434 序列的LCS [UVa 10635 -> Prince and Princess] | 动态规划 LCS映射转换LIS | 解题报告
- TYVJ1993 ACM/ICPC 2001 括号序列 解题报告
- LuoguP2757 导弹的召唤 解题报告【最长上升子序列+最长不上升子序列】
- Leetcode 424. Longest Repeating Character Replacement 替换得到最长序列 解题报告
- TYVJ1193 括号序列解题报告
- YT03-递推求解课后题目-1004 计算直线的交点数-(6.7日-烟台大学ACM预备队解题报告)分析: 将n 条直线排成一个序列,两条直线最多只有一个交点,三条直线最多有两个交点,直线n 和其他n
- 最长公共递增子序列O(n^2)模板——ZOJ2432解题报告- -
- 第五届蓝桥杯C/C++本科A组初赛波动数列解题报告
- Leetcode 395. Longest Substring with At Least K Repeating Characters 至少K重复最长子序列 解题报告