문제 로스 밸리 P1257 솔루션 비행기에 가까운 지점

비행기 P1257 가까운 지점

제목 설명

상기 N 포인트의 모든 포인트는 거리가 모든 점의 최소가되도록 소정의 거리 N 지점은 평면에서, 내부 지점의 쌍을 찾기.

입력 형식

첫번째 라인 : N, 2≤n≤10000

다음 N 라인의 두 라인 당 실제 번호 : XY 연속 좌표를 나타내고 열은 공간으로 분리 된 점 좌표.

출력 형식

하나의 행 뒤에 소수점 이하 4 자리까지 정확한 실수, 최단 거리.

샘플 입출력

입력 # 1

3
1 1
1 2
2 2

출력 # 1

1.0000

설명 / 팁

이 문제는 검색 버스트 수 있습니다

[생각]

파티션 + 열거
파티션이 위의 레이블이 될 것입니다 왜 내가 모르는 말을
나누기를 사용하여 빠른 실행을 정복 할 수
있지만,이 질문은 열거에서 전적으로는 한
어려움을 조금했다
그러나 당신은 조각을 사용하면 그는 잃은 들어
그 홍수의 문제가

그러나, 두 가지 주목할만한 장소가있다

최소 및 최대는 두 개의 동일한 입력 된 변수를 비교할 수 있습니다
정의하지 않고 두 가지 유형의 변수를 비교하는 방법입니다
그가 두 배 크기의 두 가지 유형을 비교할 수 등이, 당신은 또한 두 개의 int 형의 크기를 비교할 수
있지만, 한 번 두 번 비교 INT 유형과 컴파일 오류의 크기
는 두 종류로 여기 최소값 최소를 정의 할 필요가 있으므로
SQRT 단어 내부의 공식 cmath 라이브러리가 필요한 경우 두 점 사이의 거리로
값을 반환의 두 유형
플로트 오 확인을하지 않습니다!
는 A 정밀도로 출력하고, 때
물론, 그것은 더 나은 더블

또 다른 주목할만한 문제는 두 점 사이는 루트 식이다
두 점 사이의 거리가 동일하다 (\ \의 SQRT {- (X_1 \ - X_2) ^ 2 + (y_1 y_2)} ^ 2)

[전체 코드]

#include<iostream>
#include<cstdio>
#include<cmath> 

using namespace std;
const int Max = 10005;
struct node
{
    int x,y;
}a[Max];

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1;i <= n;++ i)
        scanf("%d%d",&a[i].x,&a[i].y);
    double Min = 0x7fffffff;
    for(int i = 1;i <= n;++ i)
        for(int j = i + 1;j <= n;++ j)
            Min = min(Min,sqrt((a[i].x -a[j].x) * (a[i].x - a[j].x) + (a[i].y - a[j].y) * (a[i].y - a[j].y)));
    printf("%.4lf\n",Min);
    return 0;
}

추천

출처www.cnblogs.com/acioi/p/11616768.html