RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
문제 KOI00267

화살표 그리기

설명

직선 위에 위치를 나타내는 0, 1, 2, ...와 같은 음수가 아닌 정수들이 일정한 간격으로 오른쪽 방향으로 놓여 있다. 이러한 위치들 중 \(N\)개의 위치에 하나씩 점들이 주어진다(<그림 \(1 > ).\) 주어진 점들의 위치는 모두 다르다. 두 점 사이의 거리는 두 점의 위치를 나타내는 수들의 차이이다. <그림 1>에서는 4개의 점이 주어지고 점 \(a\)\(b\)의 거리는 3이다.

화살표 그리기 figure

<그림 1>

각 점은 \(N\)개의 색깔 중 하나를 가진다. 편의상, 색깔은 1부터 \(N\)까지의 수로 표시한다.

각 점 \(p\)에 대해서, \(p\)에서 시작하는 직선 화살표를 이용해서 다른 점 \(q\)에 연결하려고 한다. 여기서, 점 \(q\)\(p\)와 같은 색깔의 점들 중 \(p\)와 거리가 가장 가까운 점이어야 한다. 만약 가장 가까운 점이 두 개 이상이면 아무거나 하나를 선택한다.

모든 점에 대해서 같은 색깔을 가진 다른 점이 항상 존재한다. 따라서 각 점 \(p\)에서 시작하여 위 조건을 만족하는 \(q\)로 가는 하나의 화살표를 항상 그릴 수 있다.

예를 들어, 점들을 순서쌍 (위치, 색깔) 로 표시할 때, \(a = (0{,}1),\) \(b = (1,\) 2), \(c = (3,\) 1), \(d = (4,\) 2), \(e = (5,\) 1)라고 하자.

아래 <그림 2>에서 이 점들을 표시한다. 여기서 흰색은 1, 검은색은 2에 해당된다.

화살표 그리기 figure

<그림 2>

위의 조건으로 화살표를 그리면, 아래 <그림 3>과 같이 점 \(a\)의 화살표는 \(c\)로 연결된다. 점 \(b\)\(d\)의 화살표는 각각 \(d\)\(b\)로 연결된다. 또한 점 \(c\)\(e\)의 화살표는 각각 \(e\)\(c\)로 연결된다. 따라서 모든 화살표들의 길이 합은 3 + 3 + 2 + 3 + \(2 = 13\)이다.

화살표 그리기 figure

<그림 3>

점들의 위치와 색깔이 주어질 때, 모든 점에서 시작하는 화살표들의 길이 합을 출력하는 프로그램을 작성하시오.

제약
입력 형식

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 점들의 개수를 나타내는 정수 \(N\)이 주어 진다. 다음 \(N\)개의 줄 각각에는 점의 좌표와 색깔을 나타내는 두 정수 \(x\)\(y\)가 주어진다.

출력 형식

표준 출력으로 모든 점에서 시작하는 화살표들의 길이 합을 출력한다.

예제 1
입력
5
0 1
1 2
3 1
4 2
5 1
출력
13
예제 2
입력
7
6 1
7 2
9 1
10 2
0 1
3 1
4 1
출력
16
문제 정보

생성자가 기록되지 않았습니다.

출처 올림피아드 > 한국정보올림피아드 > KOI 2018 > 2차 대회 > 초등부 2번

평가 및 의견

화살표 그리기

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

화살표 그리기

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8