페이지

3649번: Joint Venture

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


$O(n\lg n)$

먼저 l[i]를 정렬한다.
처음 i=0, j=n-1
i<j일 때까지
l[i]+l[j]<x이면 i++
l[i]+l[j]>x이면 j--
l[i]==l[j]이면 답을 출력한다.

l[i]==l[j]인 경우가 없다면 danger을 출력한다.

#include<cstdio>
#include<algorithm>
using namespace std;
int x, n, l[1000000];
int main() {
    while (~scanf("%d", &x)) {
        scanf("%d", &n);
        for (int i = 0; i < n; i++) scanf("%d", l + i);
        sort(l, l + n);
        int i = 0, j = n - 1;
        x *= 1e7;
        while (i < j) {
            if (l[i] + l[j] < x) i++;
            else if (l[i] + l[j] > x) j--;
            else {
                printf("yes %d %d\n", l[i], l[j]);
                break;
            }
        }
        if (i >= j) puts("danger");
    }
    return 0;
}

댓글 없음 :

댓글 쓰기