こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

C++のソースコードについて

このコードを書いてビルドまでノーエラーで通ったのですがいざ起動してみると起動した瞬間に動作を停止しました。と表示されて何もできません。

#include<iostream>
#include<algorithm>
using namespace std;

int main(){
long long d[2000], e[2000];
intw[2000], h[2000], a[1501 * 1024], b[1502 * 1024], n, m;

while (cin >> n >> m, n){
long k = 1, l = 1, count = 0, f = 0;
for (int i = 0; i < n; i++)
{
d[i] = 0;
cin >> w[i];
if (!i)d[0] = w[i];
else d[i] += w[i] + d[i - 1];
}
for (int i = 0; i < m; i++)
{
e[i] = 0;
cin >> h[i];
if (!i)e[0] = h[i];
else e[i] += h[i] + e[i - 1];
}
a[0] = d[0]; b[0] = e[0];
for (int i = 1; i < n; i++)
for (int j = 0; j < i; j++){
a[k] = d[i] - d[j]; k++;
}
for (int i = 1; i < m; i++)
for (int j = 0; j < i; j++){
b[l] = e[i] - e[j]; l++;
}
sort(a, a + n);
sort(b, b + m);
for (int i = 0; i < n; i++){
for (; f < m; f++){
if (a[i] == b[f]){ count++; f++; break; }
if (a[i] < b[f])break;
}
}
cout << count << endl;
}
}

ちなみにこの問題はhttp://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2015
です

投稿日時 - 2015-09-29 22:18:19

QNo.9056028

すぐに回答ほしいです

質問者が選んだベストアンサー

一目見た感じではmainのローカル変数のサイズが大きすぎない?
通常のCやC++ではローカル変数はスタック領域に確保するので、
あまり大きい変数を使うとスタック領域がオーバーフローします。
グローバル変数にするかmallocなどで動的メモリ確保する方が良いでしょう。

投稿日時 - 2015-09-29 22:55:26

補足

ありがとうございます
解決しました

投稿日時 - 2015-10-10 17:12:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(3)

ANo.3

手元の環境では以下のように static 宣言を入れれば入力待ち状態になりました。

static long long d[2000], e[2000];
static int w[2000], h[2000], a[1501 * 1024], b[1502 * 1024], n, m;

投稿日時 - 2015-10-03 11:44:27

-広告-

ANo.1

普通はエリア外を指していることが多いです。
a[10] なのにa[-1]やa[10]を使ってしまっていることが多いですね。

各ステップで配列のINDEXを表示してみたらいかがでしょう?

投稿日時 - 2015-09-29 22:25:26

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-