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

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

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

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

Q&A

解決済

1回答

651閲覧

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

nisuim

総合スコア1

C++

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

0グッド

1クリップ

投稿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/ツールのバージョンなど)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisuim

2022/11/20 11:56

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

回答1

0

ベストアンサー

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

投稿2022/11/20 22:55

ROSSY0127

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nisuim

2022/11/26 11:29

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問