안녕하세요. 오늘은 개수를 셀 거에요.

문제

https://www.acmicpc.net/problem/6159

아이디어

그냥 upper_bound로 안되는 부분을 찾고 나머지를 세서 출력해주면 됩니다.

소스코드

#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;


int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    ll N, S, i, arr[20202] = { 0 }, cnt = 0;

    cin >> N >> S;
    for (i = 1; i <= N; i++) cin >> arr[i];
    sort(arr + 1, arr + N + 1);
    for (i = 1; i <= N; i++)
    {
        ll idx = upper_bound(arr + 1, arr + N + 1, S - arr[i]) - arr;
        if (idx <= i) break;
        cnt += idx - i - 1;
    }

    cout << cnt;
}


감사합니다.

0개의 댓글