반응형
문제링크 : https://www.acmicpc.net/problem/23827
23827번: 수열 (Easy)
모든 원소가 양의 정수이고, 길이가 $N$인 수열 $A_1, A_2, ..., A_N$이 주어진다. $1 \le i < j \le N$을 만족하는 모든 정수쌍 $(i, j)$에 대해 $A_i \times A_j$의 합을 $1\, 000 \, 000 \, 007$로 나눈 나머지를 구하시
www.acmicpc.net
티어 : 실버4
문제를 보자마자 $N$이 50만이라서 포기할 뻔 했지만 생각만 해보면 쉬운 문제이다.
예제의 입력을 보면,
1 2 3, 이는 $1(2+3) + 2(3)$을 구하라는 것을 의미하며 이를 누적합을 이용하여 풀 수 있다.
이를 수식으로 정리해보자.
---
sum[i] : 0부터 i번째 인덱스까지의 수열의 합
---
반복문을 사용하여
$arr[i] * (sum[N-1] - sum[i])$를 구하여 문제조건에 맞게 출력하면 된다.
ll arr[500005];
ll sum[500005];
int main() {
fastio();
int N;
cin >> N;
for(int i=0; i<N; i++) {
cin >> arr[i];
}
sum[0] = arr[0];
ll res=0;
for(int i=1; i<N; i++) {
sum[i] = sum[i-1] + arr[i];
}
for(int i=0; i<N; i++) {
res = (res + (arr[i] * (sum[N-1] - sum[i]) % D7)) % D7;
}
cout << res;
}반응형
'BOJ' 카테고리의 다른 글
| [C++] BOJ 17114 - 하이퍼 토마토 (0) | 2022.04.04 |
|---|---|
| [BOJ] SASA Programming Contest 2021 Haru_101 ver. (0) | 2022.03.22 |
| [C++] BOJ 11726 - 2xn 타일링 (0) | 2021.09.05 |
| [C++] BOJ 18108 - 1998년생인 내가 태국에서는 2541년생?! (0) | 2021.09.04 |
| [C++] BOJ 11659 - 구간 합 구하기 4 (0) | 2021.09.04 |