# PBinfo #2538 – xOy – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

xOy
Laur desenează un sistem cartezian xOy și marchează 3 puncte necoliniare pe care le notează cu A, B și C, având coordonatele cunoscute \( (X_A, Y_A) \), \( (X_B, Y_B) \) și \( (X_C, Y_C) \). Vine Laurențiu și îi șterge sistemul de coordonate, lăsând doar punctele A, B și C, iar apoi desenează un alt punct, P, de coordonate nedeterminate.

Laur va măsura distanța dintre punctul P și punctele A, B, respectiv C, obținând valori care, ridicate la pătrat, vor fi notate cu \( D_{PA}^{2} \), \( D_{PB}^{2} \), respectiv \( D_{PC}^{2} \).

Cerința
Cunoscându-se coordonatele celor 3 puncte desenate de Laur, precum și pătratul distanțelor dintre punctul P și acestea, să se afle coordonatele în xOy ale punctului P.

Date de intrare
Se vor citi de la tastatură numerele \( X_A,Y_A,X_B,Y_B,X_C,Y_C \), iar apoi numerele \( D_{PA}^2,D_{PB}^2,D_{PC}^2 \), cu semnificația din enunț. Acestea vor fi separate (eventual pe linii) prin spații.

Date de ieșire
Se vor afișa pe ecran două numere întregi, reprezentând coordonatele punctului \( P(X_P,Y_P) \).

Restricții și precizări

\( X_A,Y_A,X_B,Y_B,X_C,Y_C,X_P,Y_P \leq 10^6\);
\( D_{PA}^2,D_{PB}^2,D_{PC}^2 \leq 10^6 \).

Exemplu
Intrare

-3 2
-1 -3
2 -2
100
89
41
Ieșire

7 2
Explicație

## Cod sursă C++

```cpp
/* ***************************
   *  Solutie Oficiala 100p  *
   *  Vintila Valentin Ioan  *
   *************************** */
//  A se citi indicatiile problemei
//  pentru ca aceasta sursa sa aiba
//  sens!
#include <iostream>
using namespace std;
int main()
{
    long long xA, yA, xB, yB, xC, yC, i2, j2;
    long long Dpa, Dpb, Dpc, xP, yP;
    cin >> xA >> yA >> xB >> yB >> xC >> yC;
    cin >> Dpa >> Dpb >> Dpc;
    i2 = Dpa - Dpc - xA*xA + xC*xC - yA*yA + yC*yC;
    j2 = Dpb - Dpc - xB*xB + xC*xC - yB*yB + yC*yC;
    xP = (i2*(yC-yB) - j2*(yC-yA)) /
         (2 * ((xC-xA)*(yC-yB) - (xC-xB)*(yC-yA)));
    yP = (i2*(xC-xB) - j2*(xC-xA)) /
         (2 * ((yC-yA)*(xC-xB) - (yC-yB)*(xC-xA)));
    cout << xP << ' ' << yP;
}
//  Nota: i2 = 2 * i (am explicat in indicatii)
//        j2 = 2 * j
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2538)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2538/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2538/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
