c++のint型におけるオーバーフローについての質問です。
この問題に対して以下のようなコードを書いたところ、WAと判定されました。
c++
1#include <iostream> 2using namespace std; 3 4int main(){ 5 int N, A[200001]; // Aは商品価格を格納するための配列 6 int B[5]; // Bは価格別の商品の個数を記録する配列 7 cin >> N; 8 for(int i=0; i<N; i++) cin >> A[i]; 9 for(int i=0; i<5; i++) B[i]=0; 10 for(int i=0; i<N; i++){ 11 B[A[i]/100]++; 12 } 13 cout << B[1]*B[4]+B[2]*B[3] << endl; 14}
解答例を確認したところ、「オーバーフロー回避のため64ビット整数を使う」と書いてあったため、 int B[5]
の部分を long long B[5]
に変えたらACになりました。
問題の制約条件から、配列Bの要素は最大でも200,000にしかならないため、32ビット整数であるint型でもオーバーフローは起きないと考えていました。どうしてこの状況でオーバーフローが起こり得るのか教えていただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/29 07:16