• toc {:toc}

문제

n 개의 μ„œλ‘œ λ‹€λ₯Έ μ–‘μ˜ μ •μˆ˜ a1, a2, …, an 으둜 이루어진 μˆ˜μ—΄μ΄ μžˆλ‹€. ai 의 값은 1 보닀 ν¬κ±°λ‚˜ κ°™κ³ , 1000000 보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜μ΄λ‹€. μžμ—°μˆ˜ x κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, aiΒ + ajΒ = x (1 ≀ i < j ≀ n) 을 λ§Œμ‘±ν•˜λŠ” (ai, aj) 쌍의 수λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μˆ˜μ—΄μ˜ 크기 n 이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ μ€„μ—λŠ” μˆ˜μ—΄μ— ν¬ν•¨λ˜λŠ” μˆ˜κ°€ μ£Όμ–΄μ§„λ‹€. μ…‹μ§Έ μ€„μ—λŠ” x κ°€ μ£Όμ–΄μ§„λ‹€. (1 ≀ n ≀ 100000, 1 ≀ x ≀ 2000000)

좜λ ₯

문제의 쑰건을 λ§Œμ‘±ν•˜λŠ” 쌍의 개수λ₯Ό 좜λ ₯ν•œλ‹€.

좜처:https://www.acmicpc.net/problem/3273

풀이

μ œν•œμ‹œκ°„ 1 초이기 λ•Œλ¬Έμ— λŒ€λž΅ 1 μ–΅ 연산을 ν•  수 μžˆλ‹€κ³  생각.

μˆ˜μ—΄μ˜ 크기 μžμ²΄κ°€ μ΅œλŒ€ 10 만이기 λ•Œλ¬Έμ— λ‹¨μˆœ λΈŒλ£¨νŠΈν¬μŠ€λ‘œλŠ” μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•¨.

===μ‹œκ°„ 단좕을 μœ„ν•΄ used 배열을 톡해 μˆ«μžκ°€ κ±°μ³κ°”λŠ”μ§€ ν™•μΈν•œλ‹€.

===이λ₯Ό 톡해 x-arr[i] λ₯Ό ν†΅ν•œ 인덱슀 μˆ«μžκ°€ 있고 μ—†μŒμ„ νŒλ‹¨ν•˜κ³ 

===true 일 경우 카운트 ν•  수 μžˆλ‹€.

#include <bits/stdc++.h>
using namespace std;
 
int arr[1000005];
bool used[2000001];
 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, x, cnt;
	cin >> n;
	for(int i=1; i<=n; i++){
		cin >> arr[i];
	}
	cin >> x;
	
	cnt = 0;
	
	for(int i=1; i<=n; i++){
		if(x-arr[i]>0 && used[x-arr[i]])
			cnt++;
		used[arr[i]]=true;
	}
	cout << cnt << '\n';
	
	return 0;
}