電子書籍の厳選無料作品が豊富!

お世話になっております。atCoderの勉強のためにABC135のC問題にトライしてみたのですが、ACにならず、17入力データ中4つしか通りません。プログラムのどこで間違えているのかわからないです。
https://atcoder.jp/contests/abc135/tasks/abc135_c

問題
N+1 個の街があり、
i 番目の街は A_i体のモンスターに襲われています。
N 人の勇者が居て、i 番目の勇者は i 番目または i+1 番目の街を襲っているモンスターを合計でB_i体まで倒すことができます。
N 人の勇者がうまく協力することで、合計して最大で何体のモンスターを倒せるでしょうか。

入力は以下のように与えられる。
N
A_1 A_2 ... A_{N+1}
B_1 B_2 ... B_N


2
3 5 2
4 5
=>9

作成したプログラムを以下に示します。
#include <iostream>
#include <vector>
using namespace std;

int main(){
int n, b_i, b_iadd1=0;
int B_i; // i番目の勇者が倒せる怪物の数
int sum = 0;
cin >> n;
vector<int> a(n+2); // 怪物の数
for(int i=1; i<=n+1; i++) cin >> a[i];
for(int i=1; i<=n; i++) {
cin >> B_i;
b_i = min(a[i] - b_iadd1, B_i);
b_iadd1 = min(a[i+1], B_i - b_i);
sum += b_i + b_iadd1;
}
cout << sum;
return 0;
}

改善箇所を教えていただきたいです。よろしくお願いします

A 回答 (4件)

int sum = 0;



long long int sum = 0;
に変えてください。
sumの最大値は、10の9乗 × 10の5乗 =10の14乗
になるので、int型では格納できません。
long long int型であれば、十分格納可能です。
    • good
    • 0
この回答へのお礼

ご指摘いただいたように、sumでオーバーフローが生じていたようでした。型を変更することで、無事にacを取れました!今後も一部の入力に対してうまくいかない場合は型の確認をするように注意します!助かりました!!
ベストアンサーが選択可能になったら、1番さんを選ばせていただきます。
ありがとうございました

お礼日時:2024/08/11 06:43
「AtCoderABC135の問題Cについ」の回答画像4
    • good
    • 0

AtCoder の問題は、ほっとこーねー。


解くのが競技なんだからさ。
    • good
    • 0

具体的に, どういう入力に対してどういまくいかないんですか?

    • good
    • 0
この回答へのお礼

質問が曖昧で失礼いたしました。どうやら、入力数が大きいものでオーバーフローしていたようでした。解決しました。ありがとうございました!

お礼日時:2024/08/11 06:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A