uva12640 Largest Sum Game

uva12640

uDebug12640

題意是說一羣酒友玩最大連續和的遊戲,誰先找到一串數字的最大連續和,誰就不用付錢。所以很直白,題目就是從一串數字中找出最大連續和,並輸出。輸入的數字序列的長度N,範圍1<=N<=100000,每個數字的取值範圍是-1000<=X<=1000

Python版本的代碼,但是效率真的是沒辦法,可能還是我的python代碼還有待提高。

try:
	while True:
		InputList = input().split()
		NumLen = len(InputList)
		if NumLen == 0:
			break
		NumList = [0]
		S = [0]
		for i in range(NumLen):
			NumList.append(int(InputList[i]))
		Min_Sum = 0
		Max_Sum = 0
		for i in range(NumLen+1):
			if i == 0:
				continue
			S.append(S[i-1] + NumList[i])
		for i in range(NumLen+1):
			if i == 0:
				continue
			if Max_Sum < S[i] - Min_Sum:
				Max_Sum = S[i] - Min_Sum
			if Min_Sum > S[i]:
				Min_Sum = S[i]
		print(Max_Sum)
except Exception as e:
	pass

C++版本代碼

#include <iostream>
#include<cstdio>
#include<sstream>
using namespace std;

//#define ZANGFONG
const int maxn = 100010;
int A[maxn],S[maxn];

int main()
{
    #ifdef ZANGFONG
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif // ZANGFONG
    int N,i,MINS,MAXS;
    string line;
    while(getline(cin,line))
    {
        istringstream iss(line);
        i = 1;
        while(iss) iss >> A[i++];
        N = i-1;
        MINS = S[0] = 0;
        for(i = 1; i <= N; i++) S[i] = S[i-1] + A[i];

        MAXS = 0;
        for(i = 1; i < N; i++)
        {
            if(MAXS < S[i] - MINS) MAXS = S[i] - MINS;
            if(MINS > S[i]) MINS = S[i];
        }
        cout << MAXS << endl;

    }

    return 0;
}

 

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