ํ์ด ๋ฐฉ๋ฒ
n ์ด 10๋ง๊น์ง ๋์ฌ ์ ์์ผ๋ฏ๋ก ์ด์ค for ๋ฌธ์ผ๋ก ์ ๊ทผํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋์จ๋ค.
์ฃผ์ด์ง ์์ ๊ตฌํํ๋ ๋ฌธ์ ์ธ๋ฐ, ์์ ์ดํดํด๋ณด๋ฉด
x1x2 + x1x3 + x2x3
= x1(x2+x3) + x2(x3)
= x1(x2~xN๊น์ง์ ํฉ) + x2(x3~xN๊น์ง์ ํฉ)
x1x2 + x1x3 + x1x4 + x2x3 + x2x4 + x3x4
= x1(x2+x3+x4) + x2(x3+x4) + x3(x4)
= x1(x2~xN๊น์ง์ ํฉ) + x2(x3~xN๊น์ง์ ํฉ) + x3(x3~xN๊น์ง์ ํฉ)
์ด๋ ๊ฒ ํํํ ์ ์์ผ๋ฉฐ ๊ท์น์ ๋ณผ ์ ์๋ค.
์ฆ, ๋์ ํฉ(prefix sum)์ ์ฌ์ฉํ์ฌ ํ์ดํ๋ฉด ๋๋ค.
์ฃผ์ํ ์ ์ int ํ์ผ๋ก ๊ฐ์ ์ ์ฅํ๋ฉด ์๋๊ณ long long ํ์ผ๋ก ์ ์ฅํ์ฌ์ผ ํ๋ค.
(int๋ก ์ ์ฅํ๋ฉด 20%์์ ํ๋ ธ์ต๋๋ค๋ฅผ ๋ณผ ์ ์๋ค.)
์ฝ๋
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <cstring>
#include <stack>
#include <queue>
#include <limits.h>
#include <regex>
#include <sstream>
#include <tuple>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// ๋จ์ํ ์ํ์ ๊ตฌํ ๋ฌธ์
// ๊ณฑ์ ๋์ ํฉ
// -2 + 3 - 6 = -5
// ๋ ๊ฐ์ฉ ๊ณฑํ๊ณ ๋ค ๋ํจ
// n์ด 10๋ง๊น์ง ๋์ฌ ์ ์์ผ๋ฏ๋ก ์๊ฐ ์ด๊ณผ ์ ์
// x1x2 + x1x3 + x2x3
// = x1(x2+x3) + x2x3
int n;
cin >> n;
vector <long long> arr(n+1);
vector <long long> ps(n+1); // ๋์ ํฉ prefix sum ์ฌ์ฉ
for(int i = 1; i <= n; i++){
cin >> arr[i];
ps[i] = ps[i-1] + arr[i];
}
long long ans = 0;
for(int i = 2; i <= n; i++){
ans += arr[i] * ps[i-1];
}
cout << ans << "\n";
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_18258 : ํ 2 (C++) (0) | 2023.02.21 |
---|---|
BOJ_16208 : ๊ท์ฐฎ์ (C++) (0) | 2023.02.20 |
BOJ_20114 : ๋ฏธ์ ๋ ธํธ (C++) (0) | 2023.02.17 |
BOJ_5671 : ํธํ ๋ฐฉ ๋ฒํธ (C++) (0) | 2023.02.13 |