Rezolvare completă PbInfo #1139 Covor

Bunica Marei țese un covor. Mara urmărește cu mare atenție modelul și încearcă să-l reconstituie pe caietul de matematică. Modelul este format din romburi. Primul romb, de indice 1, are latura formată din două pătrățele, al doilea romb, de indice 2, are latura formată din trei pătrățele etc. Un romb de indice i are latura formată din i+1 pătrățele.
Romburile sunt unite, consecutiv, ca în exemplul din imaginea alăturată. Săgețile indică sensul în care bunica țese covorul.

Ca să nu uite modelul, Mara scrie pe caiet, începând cu 1, numere consecutive care să indice modul în care țese bunica covorul.

În exemplul următor este reprezentat modul în care se țese un model format din patru romburi.

Cerinţe

Cunoscându-se numerele n și k să se determine:

1. numărul maxim de romburi complete care pot forma modelul unui covor, descris cu ajutorul unui șir format din maximum n numere naturale consecutive (primul număr din șir fiind 1);
2. cel mai mic indice al unui romb ce conține numărul k.

Date de intrare

Fișierul de intrare covor.in conține pe prima linie, separate prin spațiu, două numere naturale: n (reprezentând numărul maxim de numere consecutive utilizate la descrierea unui model) și k (reprezentând un număr din șirul celor n numere consecutive). Linia a doua conţine una dintre valorile 1 sau 2 reprezentând cerinţa 1, dacă se cere determinarea numărului maxim de romburi complete care pot forma modelul unui covor descris cu ajutorul unui șir format din maximum n numere, respectiv cerinţa 2, dacă se cere determinarea celui mai mic indice al unui romb ce conține numărul k.

Date de ieșire

Fișierul de ieșire covor.out va conține pe prima linie o valoarea naturală reprezentând numărul maxim de romburi complete care pot forma modelul unui covor, descris cu ajutorul unui șir format din maximum n numere, dacă cerinţa a fost 1, respectiv un număr natural reprezentând cel mai mic indice al unui romb ce conține numărul k, dacă cerinţa a fost 2.

Restricții și precizări

  • 4 ≤ n,k ≤ 999999999; 1≤k≤n
  • Dacă numărul k nu se află pe niciunul dintre romburile complete ce pot fi construite folosind maximum n numere, atunci răspunsul de la cerința 2 este 0.
  • Pentru rezolvarea corectă a cerinţei 1 se acordă 30% din punctaj, iar pentru rezolvarea corectă a cerinţei 2 se acordă 70% din punctaj.

Exemple

covor.in covor.out Explicație
40 32
1

4

Cel mai mare număr de romburi ce pot forma un model descris cu maximum 40 de numere este 4.

40 32
2

3

Numărul 32 se află pe cel de-al treilea romb.

37 7
2

2

Numărul 7 se află pe cel de-al doilea și pe cel de-al treilea romb. Cel mai mic indice al unui romb ce conține numărul 7 este 2.

14 12
2

0

Numărul 12 nu se află pe niciunul dintre cele două romburi ce pot forma un model descris cu maximum 14 de numere.

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 Covor:

#include <fstream>

using namespace std;
ifstream f("covor.in");
ofstream g("covor.out");
int n,k,r,p,m,c;
int main()
{ f>>n>>k>>c;
  r=1;
  while(2*(r+1)*(r+2)-r<=n) r++;
  if(c==1)
       g<<r<<'\n';
  else
  {
  if(k> 2*r*(r+1)-(r-1)) g<<0<<'\n';
   else
     { p=1;
       m=1+r*(r+1);
       if(k<=m) { while(k>1+p*(p+1))p++;
                  g<<p<<'\n';
                }
         else
         { p=r;
           while(k>(m+2*p-1))
                  { m=m+2*p-1;
                    p--;
                  }
           g<<p<<'\n';
         }
     }
  }
    f.close();g.close();
    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 #1139 Covor

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1139 Covor 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!