1994 - Vanatoare: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 27: Linia 27:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
def validare(ka, kb):
def validare(ka, kb):
     if 0 <= ka <= 2_000_000_000 and 0 <= ka <= 2_000_000_000:
     if 0 <= ka <= 2_000_000_000 and 0 <= kb <= 2_000_000_000:
         return True
         return True
     else:
     else:
Linia 64: Linia 64:
     ka, kb = map(int, input().split())
     ka, kb = map(int, input().split())
     if validare(ka, kb):
     if validare(ka, kb):
        print("Date de intrare valide")
         vanatoare(ka, kb)
         vanatoare(ka, kb)
    else:
        print("Date de intrare invalide")
</syntaxhighlight>
</syntaxhighlight>

Versiunea de la data 29 aprilie 2023 19:24

Enunț

Vânătorul şef al regelui Arthur a primit însărcinare să vâneze primele raţe ce se întorc din ţările calde. Regele fiind un tip cu idei fixe i-a cerut vânătorului să vâneze raţele albe cu săgeţi albe, iar raţele negre cu săgeţi negre. Raţele vin în stoluri din ce în ce mai mari: mai întâi una, apoi două, trei , cinci, opt ş.a.m.d. Raţele fiind nişte creaturi ordonate zboară în rânduri lungi, în care nu vei putea găsi două raţe de aceeaşi culoare alăturate, fiecare rând începînd cu o raţă albă. Vânătorul ştie că dacă a început să doboare un rând de raţe trebuie să le doboare pe toate deoarece supravieţuitoarele vor alerta celelalte raţe şi ele nu se vor mai întoarce niciodată, iar vânătorul nostru îşi va pierde slujba.

Cerința

Ştiind că vânătorul a primit ka săgeţi albe şi kb săgeţi negre trebuie să determinaţi câte rânduri de raţe a doborât şi câte săgeţi de fiecare tip i-au rămas ştiind că el vrea să-şi păstreze slujba.

Date de intrare

Se citesc de la tastatură numerele ka şi kb (în această ordine).

Date de ieșire

Se va afişa pe prima linie a ecranului numărul de rânduri doborâte, pe a doua linie numărul de săgeți albe rămase, iar pe cea de-a treia numărul de săgeți negre.

Restricții și precizări

0 ≤ ka, kb ≤ 2.000.000.000

Exemplu:

Intrare 9 10

Ieșire 4 2 6

Rezolvare

def validare(ka, kb):
    if 0 <= ka <= 2_000_000_000 and 0 <= kb <= 2_000_000_000:
        return True
    else:
        return False


def creare(v):
    v[1] = 1
    v[2] = 2
    for i in range(3, 101):
        v[i] = v[i-1] + v[i-2]


def vanatoare(ka, kb):
    v = [0] * 101
    creare(v)
    cka = ka
    ckb = kb
    i = 1
    while cka >= 0 and ckb >= 0:
        ka = cka
        kb = ckb
        if v[i] % 2 == 0:
            cka -= v[i] // 2
            ckb -= v[i] // 2
        else:
            cka -= v[i] // 2 + 1
            ckb -= v[i] // 2
        i += 1
    print(i-2)
    print(ka)
    print(kb)


if __name__ == "__main__":
    ka, kb = map(int, input().split())
    if validare(ka, kb):
        print("Date de intrare valide")
        vanatoare(ka, kb)
    else:
        print("Date de intrare invalide")