CSU 1203 Super-increasing sequence

来源:互联网 发布:车床圆弧编程 编辑:程序博客网 时间:2024/05/19 12:28

CSU 1203 Super-increasing sequence


Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 592 Solved: 243

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

#include <iostream>#include <cstdio>using namespace std;int main(){    int T;    scanf("%d", &T);    while(T--) {        int N;        scanf("%d", &N);        int a[N + 5];        for(int i = 0; i < N; i++) {            scanf("%d", &a[i]);        }        long long sumI = a[0];        int num = 1;        for(int i = 1; i < N; ) {            if(a[i] > sumI) {                sumI += a[i];                num++;                i++;            } else {                int tmp = 0;                for(int j = i; j < N; j++) {                    if(j == N - 1) {                        tmp += a[j];                        if(tmp > sumI) {                            num++;                        }                        i = j + 1;                        break;                    } else {                        tmp += a[j];                        if(tmp > sumI) {                            sumI += tmp;                            i = j + 1;                            num++;                            break;                        }                    }                }            }        }        printf("%d\n", num);    }    return 0;}
0 0
原创粉丝点击