CSU 1203: Super-increasing sequence 水题

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 
#include 
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;
 } 

你可能感兴趣的:(水题,水题)