[문제 링크] : https://www.acmicpc.net/problem/13900
### 성능 요약
메모리: 3464 KB, 시간: 44 ms
### 분류
수학, 누적 합
### 제출 일자
2023년 12월 19일 01:26:58
### 문제 설명
N개의 정수 중 서로 다른 위치의 두 수를 뽑는 모든 경우의 두 수의 곱의 합을 구하라.
예를 들어 N = 3이고 주어진 정수가 2, 3, 4일 때, 두 수를 뽑는 모든 경우는 (2, 3), (2, 4), (3, 4)이며 이때 각각의 곱은 6, 8, 12이다. 따라서 총합은 26이다.
### 입력
첫 번째 줄에는 입력 받을 정수의 개수 N(2 ≤ N ≤ 100,000)
두 번째 줄에는 N 개의 정수가 주어진다. 이때 입력 받는 정수들의 범위는 0이상 10,000 이하이다.
### 출력
모든 경우의 곱의 합을 출력한다.
### 작성한 코드
#include
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
int main() {
int N;
cin >> N;
long arr[100000];
for (int i = 0; i < N; ++i) {
cin >> arr[i];
}
long answer = 0;
long psum[100000];
psum[0] = arr[0];
for (int i = 1; i < N; ++i) {
psum[i] = psum[i - 1] + arr[i];
}
for (int i = 0; i < N - 1; ++i) {
answer += arr[i] * (psum[N - 1] - psum[i]);
}
cout << answer;
}
'문제 풀이 > 문제 풀이(BOJ)' 카테고리의 다른 글
[Bronze III] 최댓값 - 2566 (0) | 2023.12.20 |
---|---|
[Silver V] 2차원 배열의 합 - 2167 (1) | 2023.12.20 |
백준 13458: 시험감독 (0) | 2023.12.12 |
백준 30889: 좌석 배치도 (0) | 2023.12.05 |
백준 2214: 로프 (0) | 2023.12.01 |