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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章