SRM399過去問といてみたんだけど、テスト結果が異なる

SRM399の本番は朝だったので参加せずに、授業に出た。夜になってDiv.2の250点問題を解いてたらあいかわらず頭が動かない。

さてほげほげしてPracticeRoomにてコードを書いたのだけれど、手元のXcodeが提供するg++とTopCoderアプレットコンパイラで違う結果が出た。

追記

答えはvectorの存在していない要素にアクセスしようとしていたからでした。まる!

class CircularLine {

public:

  int longestTravel(vector <int> t) {
    int s=t.size();
    int sum1, sum2;
    int tmp = 0;
    for (int i=0; i<s; i++) {
      for (int j=i; j<s+i; j++) {
	sum1 = 0;
	sum2 = 0;
	for(int k=i; k<j; k++) {
	  sum1 += t[k];
	}
	for(int k=j; k<s+i; k++) { 
	  if (k >= s) {
	    sum2 += t[k-s];
	  } else {
	    sum2 += t[k];
	  }
	}
	tmp = max(tmp, min(sum1, sum2));
      }
    }
    return tmp;
  }
}

次のテストケースで、手元のg++だとちゃんと7を返してくれるのに、TopCoderアプレットは9を返すって言ってる。なんでだろう??

1)
{1,4,4,1,5}

Returns: 7

トップコーダ

上のコードに処理系によって動作が異なるような表現がある???

問題文はこちら。

There's a circular subway line that contains n stations numbered 0 through n-1. The time to travel between stations 0 and 1 is t[0], the time to travel between stations 1 and 2 is t[1], ..., the time to travel between stations n-1 and 0 is t[n-1]. You can travel between stations in either direction, so there are always two ways to get from one station to another without visiting the same station more than once. For example, if there are 4 stations, the two ways of getting from station 1 to station 3 are 1-2-3 and 1-0-3. The total travel time in the first case is t[1] + t[2], and in the second case, it is t[0] + t[3]. When a person needs to get from one station to another, she always chooses the faster of the two ways.

You are given a vector t. Find two stations such that the fastest travel time between them is the maximal possible. Return this time.