Triunghiuri

Time limit: 2s Memory limit: 512MB Input: Output:

Ana și Bogdan desenează fiecare câte NN puncte laticiale (cu coordonate întregi) în planul xOyxOy. Punctele Anei sunt notate cu P0,P1,,PN1P_0, P_1, \dots, P_{N-1}, iar cele ale lui Bogdan cu Q0,Q1,,QN1Q_0, Q_1, \dots, Q_{N-1}.

Bogdan observă o proprietate interesantă: pentru orice ii de la 00 la N1N-1, punctul său QiQ_i este centrul de greutate al triunghiului format de punctul PiP_i al Anei și de alte două puncte ale sale, QaiQ_{a_i} și QbiQ_{b_i} (unde ai,bi{0,1,,N1}a_i, b_i \in \{0, 1, \dots, N-1\}).

Într-un moment de neatenție, Ana șterge punctele desenate de Bogdan. Acum, el trebuie să le reconstruiască, știind doar coordonatele punctelor PiP_i și relațiile descrise mai sus (perechile de indici aia_i și bib_i).

Cerință

Dându-se punctele P0,P1,,PN1P_0, P_1, \dots, P_{N-1} și perechile de indici (ai,bi)(a_i, b_i) pentru fiecare i{0,,N1}i \in \{0, \dots, N-1\}, \ determinați coordonatele punctelor Q0,Q1,,QN1Q_0, Q_1, \dots, Q_{N-1}.

Detalii de implementare

Veți avea de implementat o singură funcție:

std::vector<std::pair<long long, long long>> solve(
    int N,
    std::vector<std::pair<long long, long long>> p,
    std::vector<int> a, std::vector<int> b);

Funcția solve se apelează de comisie o singură dată și primește ca parametri:

  • NN: numărul de puncte desenate de Ana;
  • pp: coordonatele celor NN puncte desenate de Ana (indexate de la 00);
  • aa și bb: reprezentând perechile de indici pentru fiecare proprietate

și trebuie să returneze un șir de perechi, dat de coordonatele punctelor Q0,Q1,,Qn1Q_0, Q_1, \dots, Q_{n-1}.

Restricții

  • 3N300 0003 \leq N \leq 300 \ 000
  • 0ai,bi<N0 \leq a_i, b_i < N, pentru 0i<N0 \leq i < N
  • aiia_i \neq i, biib_i \neq i, aibia_i \neq b_i pentru 0i<N0 \leq i < N
  • Toate perechile neordonate {ai,bi}\{a_i, b_i\} sunt distincte două câte două
  • 00 \leq coordonatele punctelor PiP_i <71018< \mathbf{7 \cdot 10^{18}}, pentru 0i<N0 \leq i < N
  • 00 \leq coordonatele punctelor QiQ_i <71018< \mathbf{7 \cdot 10^{18}}, pentru 0i<N0 \leq i < N
  • Se garantează că triunghiurile din proprietăți nu sunt degenerate
  • Se poate demonstra că există o soluție unică pentru determinarea punctelor QiQ_i
  • Laturile QaiQbiQ_{a_i}Q_{b_i} (bazele celor NN triunghiuri) formează împreună o singură figură geometrică continuă.

O figură geometrică este continuă dacă, oricum am alege două puncte QuQ_u și QvQ_v, există o secvență de puncte Qp1,Qp2,,QpkQ_{p_1}, Q_{p_2}, \ldots, Q_{p_k} care respectă următoarele proprietăți:

  • p1=up_1=u, pk=vp_k=v;
  • Pentru orice 1j<k1 \le j < k, există o pereche neordonată {Qai,Qbi}\{Q_{a_i}, Q_{b_i}\} în input care coincide cu {Qpj,Qpj+1}\{Q_{p_j}, Q_{p_{j+1}}\}.
# Punctaj Restricții
1 2 N=3N = 3
2 7 N300N \leq 300
3 14 N3 000N \leq 3 \ 000
4 12 00 \leq coordonatele PiP_i, QiQ_i <109< \mathbf{10^{9}}, pentru 0i<N0 \leq i < N
5 24 NN - impar, laturile QaiQbiQ_{a_i}Q_{b_i} formează un poligon
6 22 Date de intrare generate aleator
7 19 Fără restricții suplimentare.

Exemplul 1

input

4
3 2
7 3
6 7
2 6
2 3
3 0
0 1

output

4 4
5 4
5 5
4 5

Explicație

Pentru primul exemplu, desenul este redat în imaginea de mai jos.

Punctele Anei sunt notate cu P0,P1,P2,P3P_0, P_1, P_2, P_3, iar cele ale lui Bogdan cu Q0,Q1,Q2,Q3Q_0, Q_1, Q_2, Q_3.

Exemplul 2

input

3
399999993 599999990
1 200000002
200000017 26
1 2
2 0
0 1

output

250000001 350000002
150000003 250000005
200000007 200000011

Log in or sign up to be able to send submissions!