質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

Atcoder ABC278 C問題 REになってしまう

nisuim
nisuim

総合スコア1

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0グッド

1クリップ

309閲覧

投稿2022/11/20 08:35

編集2022/11/21 03:25

前提

Atcoder ABC278 C問題をC++で解いています。
https://atcoder.jp/contests/abc278/tasks/abc278_c

実現したいこと

sample問題をローカルの環境でg++ C.cpp -o out -std=gnu++17でコンパイルし,
実行したところうまくいっているように見えたのですが,
提出したところ全問REとなってしまいました。
原因が全くわからないため質問させてください。
自分のコードのどこが間違っているかご教示お願いいたします。

発生している問題・エラーメッセージ

全問実行時エラー

該当のソースコード

C++

1#include <iostream> 2#include <string> 3#include <cmath> 4#include <vector> 5#include <algorithm> 6 7using namespace std; 8using ll=long long; 9 10 11 12int main(void){ 13 14 ll N,Q; 15 cin >> N >> Q; 16 vector<vector<long long int> > follow(N+1); 17 18 for(ll i=0;i<Q;i++){ 19 int T; 20 ll A,B; 21 22 cin >> T >> A >> B; 23 24 if(T == 1){ 25 if(find(follow[A].begin(), follow[A].end(), B) == follow[A].end()){ 26 follow[A].push_back(B); 27 } 28 }else if(T == 2){ 29 auto itr = find(follow[A].begin(), follow[A].end(), B); 30 if(itr != follow[A].end()){ 31 follow[A].erase(itr); 32 } 33 }else{ 34 if(find(follow[A].begin(), follow[A].end(), B) != follow[A].end() && find(follow[B].begin(), follow[B].end(), A) != follow[B].end()){ 35 cout << "Yes" << endl; 36 }else{ 37 cout << "No" << endl; 38 } 39 } 40 } 41 42 return 0; 43}

試したこと

vectorを定義する際の添字をN→N+1に変更した結果,REが半分減りました

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

nisuim

2022/11/20 11:56

すみません,外部サイトだということもすっかり忘れてリンク貼っていませんでした。 失礼いたしました。 二次元配列のvector<vector<long long int> > follow(N);をfollow(N+1)にしたら、 半分ほど実行時エラーが減りました。ご指摘ありがとうございます!

回答1

1

ベストアンサー

メモリ不足だと思います。N=10^9要素をもつlong long int型のvectorは、それだけで8GBほどのメモリ領域を使います。それが実行時エラーの原因と思われます。
実際、プログラム本体をtry catchにかけてbad_allocを検出してみると、後半の問題セットはWAになり、REにはなっていませんでした。

投稿2022/11/20 22:55

ROSSY0127

総合スコア14

tmp👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

nisuim

2022/11/26 11:29

そもそもvector使わずに解いた方が良さそうということがわかりました。 わかりやすい回答ありがとうございました!

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。