AtCoder BeginnerContest 177_C
N個の整数 A1,…,ANが与えられます。
1≤i<j≤Nを満たす全ての組 (i,j)についての Ai×Ajの和を mod(10の9乗+7)で求めてください。
制約
2≤N≤2×1050≤Ai≤109入力は全て整数
上記の問題について質問があります。解答を読んだ上で解法は理解していますが、
mod計算を行うタイミングについて質問があります。
以下のような2つのコードを実装しましたがなぜ片方のコードだけうまくいかないのかがわかりませんでした。
##ACが出た
#include <bits/stdc++.h> using namespace std; using ll = long long; const long long INF = 1LL << 60; int main(){ ll N; cin >> N; vector<ll> A(N); ll sum = 0; for(int i=0; i<N; i++) { cin >> A[i]; sum += A[i]; } ll ans = 0; for(int i=0; i<N; i++) { sum -= A[i]; ans += (A[i]) * (sum % (1000000000 + 7)); ans %= (1000000000 + 7); } cout << ans; }
##WAのケース
#include <bits/stdc++.h> using namespace std; using ll = long long; const long long INF = 1LL << 60; int main(){ ll N; cin >> N; vector<ll> A(N); ll sum = 0; for(int i=0; i<N; i++) { cin >> A[i]; sum += A[i]; } ll ans = 0; for(int i=0; i<N; i++) { sum -= A[i]; ans += (A[i] * sum) % (1000000000 + 7); ans %= (1000000000 + 7); } cout << ans; }
違いはfor文の中身のみで(1000000000 + 7)であまりを出すタイミングが異なっています。
なぜこの二つで結果が異なるのでしょうか?
何かアドバイスをいただけると幸いです。
よろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/01 13:48
2020/09/01 14:25