1139 - Covor

From Bitnami MediaWiki
Revision as of 16:32, 13 December 2023 by Raul (talk | contribs) (Pagină nouă: 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 <code>1</code>, are latura formată din două pătrățele, al doilea romb, de indice <code>2</code>, are latura formată din trei pătrățele etc. Un romb de indice <code>i</code> are latura formată din <code>i+1</code> pătrățele. Romburile sunt unite, consecutiv, ca în exemplul di...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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.

Încărcare soluție

Lipește codul aici

1

​with open("covor.in", "r") as f:
    n, k, c = map(int, f.readline().split())
r = 1
while 2 * (r + 1) * (r + 2) - r <= n:
    r += 1
with open("covor.out", "w") as g:
    if c == 1:
        g.write(str(r) + '\n')
    else:
        if k > 2 * r * (r + 1) - (r - 1):
            g.write('0\n')
        else:
            p = 1
            m = 1 + r * (r + 1)
            if k <= m:
                while k > 1 + p * (p + 1):
                    p += 1
                g.write(str(p) + '\n')
            else:
                p = r
                while k > (m + 2 * p - 1):
                    m = m + 2 * p - 1
                    p -= 1
                g.write(str(p) + '\n')