1. 程式人生 > >Offer收割]程式設計練習賽50---迴圈陣列

Offer收割]程式設計練習賽50---迴圈陣列

描述
給定包含N個整數的陣列A1, A2, ... AN,你可以選擇任意一個Ai,將Ai旋轉到陣列第一項,即將陣列變成:

Ai, Ai+1, Ai+2, ... AN, A1, A2, ..., Ai-1  

現在小Hi希望旋轉之後的陣列滿足:

對於任意K(1 ≤ i ≤ N),前K項的和都是正數。  

例如對於A=[3, -5, 2, -2, 3, 0],旋轉成[3, 0, 3, -5, 2, -2]滿足條件。  

請你輸出i,代表將Ai旋轉到第一項滿足條件。  

如果有多解,你可以輸出任意一個i。如果無解輸出-1。

輸入
第一行包含一個整數N。  

第二行包含N個整數A1, A2, ... AN。  

對於50%的資料,1 ≤ N ≤ 1000  

對於100%的資料,1 ≤ N ≤ 100000, -1000000 ≤ Ai ≤ 1000000

輸出
一個整數表示答案。

樣例輸入
6  
3 -5 2 -2 3 0
樣例輸出
5
#include <cstdlib>
#include <cstdio>

using namespace std;
int a[100001];
int main(int argc, char *argv[])
{
    int n,j;
    long long sum;
    while(~scanf("%d",&n)){
    sum=0;
    for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
    }
    j=0;
    for(int i=0;i<n-j;i++){
        sum=sum+a[i];
        while(sum<=0)
        {
             j++;
             if(i<n-j)
             sum+=a[n-j];
             else
             break;
        }
    }
    if(sum>0)
    printf("%d\n",n-j+1);
    else
    printf("-1\n");
    }
    system("PAUSE");
    return EXIT_SUCCESS;
}