CSU 1203: Super-increasing sequence 水题

来源:互联网 发布:淘宝店铺处罚规则 编辑:程序博客网 时间:2024/05/19 12:16

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

321 131 2 461 2 4 3 6 5

Sample Output

134

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; } 
原创粉丝点击