Rezolvare completă PbInfo #2034 Archpsod

Vrăjitorul Arpsod s-a plictisit groaznic așa că s-a gândit să își cheme prietenii (vrăjitori din regatele vecine) la un joc. Deoarece nu crede în “noroc”, Arpsod i-a provocat la tir cu arcul. Câștigătorul va fi cel ce va avea distanța maximă între două săgeți aflate pe țintă.

Cerința

Arpsod vă roagă să faceți un program care, pentru un număr N cunoscut de trageri și poziția fiecărei săgeți pe țintă, determină distanța maximă dintre două săgeți.

Date de intrare

În fișierul archpsod.in, pe prima linie, se va afla numărul natural N, reprezentând numărul de trageri. Pe fiecare din următoarele N linii, se află două numere întregi x și y, reprezentând coordonatele săgeților pe țintă.

Date de ieșire

În fișierul archpsod.out, pe prima și singura linie se va afișa un număr real reprezentând distanța maximă dintre două săgeți. Răspunsul este considerat corect dacă diferența față de răspunsul oficial este mai mică de 10-6.

Restricții și precizări

  • 2 ≤ N ≤ 100.000
  • -1.000 ≤ x, y ≤ 1.000
  • Se garantează că toate cele N săgeți sunt pe țintă.
  • Coordonatele planului sunt carteziene
  • Originea planului este considerată centrul țintei.

Exemplu

archpsod.in

2
2 2
-1 -2
5
-4 1
-100 0
0 4
2 -3
2 300

archpsod.out

5.0
316.865902

Explicație

În exemplul al doilea, distanța maximă este dată de punctele (-100, 0) și (2, 300)

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Archpsod:

// implementare: Cristi Dospra
// punctaj: 20p
// complexitate: O(N^2)

#include <fstream>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

#define NMAX 100002

ifstream fin("archpsod.in");
ofstream fout("archpsod.out");

struct point {
    int x, y;
};

point v[NMAX];

inline int sqr(int x) {
    return x * x;
}

inline double dist(point A, point B) {

    return sqrt(1.0 * (sqr(A.x - B.x) + sqr(A.y - B.y)));
}

int main() {

    int N;
    fin >> N;

    for (int i = 1; i <= N; ++i)
        fin >> v[i].x >> v[i].y;

    double Sol = 0.0;

    for (int i = 1; i <= N; ++i)
        for (int j = i + 1; j <= N; ++j)
            Sol = max(Sol, dist(v[i], v[j]));

    fout << fixed << setprecision(6) << Sol << "\n";

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2034 Archpsod

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2034 Archpsod de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!