1139 - Covor: Difference between revisions
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... |
No edit summary |
||
Line 64: | Line 64: | ||
=== Lipește codul aici === | === Lipește codul aici === | ||
1 | <syntaxhighlight lang="python" line="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') | |||
</syntaxhighlight> |
Latest revision as of 13:49, 14 December 2023
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
4 ≤ n,k ≤ 999999999
;1≤k≤n
- Dacă numărul
k
nu se află pe niciunul dintre romburile complete ce pot fi construite folosind maximumn
numere, atunci răspunsul de la cerința 2 este0
. - 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[edit | edit source]
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[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python" line="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')
</syntaxhighlight>