3336 - acadele

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerinţa

Candyman are acadele de trei feluri: cu căpşuni, cu vişine şi cu zmeură, oricâte acadele din fiecare fel. Cei n copii de la grupa pregătitoare şi-au ales fiecare câte o acadea astfel încât cel mult doi copii şi-au ales cu vişine. Dacă notăm cu m numărul de moduri în care puteau să-şi aleagă fiecare câte o acadea, să se afle restul împărţirii lui m la 2020.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran restul împărţirii lui m la 2020.

Restricţii şi precizări

  • 1 ⩽ n ⩽ 1018

Exemplul 1

Intrare
2 
Iesire
Datele de intrare corespund restrictiilor impuse
9

Exemplu 2

Intrare
10000000000000000000
Iesire
Datele de intrare nu corespund restrictiilor impuse

Rezolvare

def compute_ways(n):
    mod = 2020
    if n == 1:
        return 3 % mod
    elif n == 2:
        return 9 % mod
    else:
        return (3 * 3 * pow(2, n-2, mod)) % mod


def main():
    n = int(input())

    if n > pow(10, 18):
        print("Datele de intrare nu corespund restrictiilor impuse")
        return

    ways = compute_ways(n)
    print("Datele de intrare corespund restrictiilor impuse")
    print(ways)


if __name__ == "__main__":
    main()

Explicatie

Cei doi copii puteau să-şi aleagă acadelele astfel: (c,c), (z,z), (v,v), (c,v), (v,c), (c,z), (z,c), (v,z), (z,v).