# PBinfo #2864 – sotron – Rezolvare C++

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

## Enunț

Enunț
Gigel, pasionat de sport și matematică, construiește, din pătrățele identice așezate alăturat, un șotron triunghiular desenând  1 un pătrățel pe rândul 1, apoi 2 pătrățele pe rândul 2, 3 pătrățele pe rândul 3,…., N pătrățele pe rândul N. Șotronul are pe fiecare latură N pătrățele desenate. Apoi, Gigel numerotează  pătrățelele cu numere naturale consecutive distincte, pornind de la 1, ca în desenul următor realizat pentru N=7.  Pornind de la pătrățelul situat în rândul 1 si coloana 1, el numerotează o singură dată,în această ordine, pătrățelele situate pe coloana 1, apoi cele de pe rândul N, coloana 2, rândul N-1, coloana 3, rândul N-2 ….  



Cerința
Scrieți un program care citește numerele naturale N și M, apoi rezolvă următoarele două cerințe:
1. determină cel mai mare număr Z scris de Gigel într-un pătrățel din șotron;
2. determină rândul R și coloana C ale pătrățelului din șotron în care este scris numărul M.

Date de intrare
Fișierul de intrare sotron.in conține pe prima linie pe prima linie trei numere naturale P, N  și M, separate prin câte un spațiu, P reprezentând cerința din problemă care trebuie rezolvată (1 sau 2).

Date de ieșire
Dacă P=1, atunci fișierul de ieșire sotron.out conține pe prima linie numărul Z, reprezentând  răspunsul la cerința 1 a problemei. 
Dacă P=2, atunci fișierul de ieșire sotron.out conține pe prima linie cele două numere naturale R și C, reprezentând răspunsul la cerinta 2 a problemei.

Restricții și precizări
• 3 ≤ N ≤ 111111
• N este un număr natural impar
• 1 ≤ M ≤ 6172882716
• Numerele N, R și C sunt numere naturale
• Pentru fiecare test există răspuns
• Pentru rezolvarea corectă a cerinței 1 se acordă 50 de puncte;  pentru rezolvarea corectă a  cerinței 2 se acordă 50 de puncte.

Exemple:
sotron.in

1 7 19
sotron.out

28
Explicatie
Vezi desenul

Exemplu:
sotron.in

2 7 19
sotron.out

6 3
Explicatie
Vezi desenul


Olimpiada de Informatică 2019, etapa pe școală, C.N.I."T.Vianu", clasa 9-a

## Cod sursă C++

```cpp
#include<fstream>
using namespace std;
ifstream f("sotron.in");
ofstream g("sotron.out");
int main()
{
    long long P,N,M,R,C,nrp,nr,n1,n2,k,x;
    f>>P>>N>>M;
    if(P==1)
        g<<N*(N+1)/2<<endl;
    else
    {
        nr=2*N-1;
        x=nr;
        nrp=0;
        k=1;
        while( M<=nrp || M>nrp+x )
        {
           nrp+=x; x-=4; ++k;
        }
        n1=(k-1)*(nr+4-2*k)+1;
        n2=N+n1+1-2*k;
        if(M<=n2)
        {
          R=k+M-n1; C=k;
        }
        else
        {
          R=N+1-k; C=k+M-n2;
        }
        g<<R<<' '<<C<<endl;
    }
    return 0;
}
```

## Resurse

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