CSU 1203: Super-increasing sequence 水题
Description
如果一个序列中任意一项都大于前面所有项之和,那么我们就称这个序列为超递增序列。
现在有一个整数序列,你可以将序列中任意相邻的若干项合并成一项,合并之后这项的值为合并前各项的值之和。通过若干次合并,最终一定能得到一个超递增序列,那么得到的超递增序列最多能有多少项呢?
Input
输入数据的第一行包含正整数T (1 <= T <= 500),表示接下来一共有T组测试数据。
每组测试数据的第一行包含一个整数N (1 <= N <= 100000),表示这个整数序列一共有N项。接下来一行包含N个不大于10000的正整数,依次描述了这个序列中各项的值。
至多有10组数据满足N > 1000。
Output
对于每组测试数据,用一行输出一个整数,表示最终得到的超递增序列最多能有多少项。
Sample Input
3 2 1 1 3 1 2 4 6 1 2 4 3 6 5
Sample Output
1 3 4
Hint
Source
CSU Monthly 2013 Apr.#include <iostream>
#include <cstdio>
using namespace std;
int a[100005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N;
cin>>N;
for(int i = 0 ; i < N ; i++)
scanf("%d",&a[i]);
int sum = a[0];
int newsum = 0;
int last = 1;
int num = 1;
while(last < N)
{
for(; last < N ; last++)
{
newsum += a[last];
if(newsum > sum)
{
num++;
sum += newsum;
newsum = 0;
last++;
break;
}
}
}
printf("%d\n",num);
}
return 0;
}