• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SPOJ - KART - Kartkówka, PYTHON błąd wykonania (NZEC)

VPS Starter Arubacloud
+1 głos
510 wizyt
pytanie zadane 16 sierpnia 2021 w SPOJ przez rtworek Nowicjusz (160 p.)
zmienione kategorie 16 sierpnia 2021 przez ScriptyChris

Cześć!

Mam problem z zadaniem SPOJ - KART - Kartkówka.
Program działa dobrze gdy testuje go u siebie, ale po wrzuceniu do SPOJa zwraca "błąd wykonania (NZEC)"

Jakieś podpowiedzi co może być przyczyną?

Dziękuję!

import math

t = int(input())
n_list = []
k_list = []

for i in range(t):
    x = int(input())
    k = 1
    while 5**k <= x:
        k +=1
        if x < 5**(k+1):
            break
    n_list.append(x)
    k_list.append(k)

for j in range(t):
    trailingZeros = 0
    if n_list[j] < 5:
        print(trailingZeros)
    else:
        for x in range(1, k_list[j]+1):
            trailingZeros += (math.floor((n_list[j]/(5**x))))
        print(trailingZeros)

 

 

2 odpowiedzi

0 głosów
odpowiedź 16 sierpnia 2021 przez wojtek_suchy Mądrala (6,880 p.)
wybrane 17 sierpnia 2021 przez rtworek
 
Najlepsza

Dam ci parę rad bo widać że zaczynasz z zadankami

Jeśli masz zamiar uczestniczyć w Olimpiadzie Informatycznej lub w jakichkolwiek innych konkursach programistycznych to musisz nauczyć się C++. Python jest za wolny, nawet z PyPy, niestety :(.

Możesz wypisywać odpowiedź do testu kiedy chcesz, dla sędziego to jedno i to samo więc nie musisz najpierw gdzieś trzymać odpowiedzi, a dopiero na końcu wypisywać.

Odejdź od tej złej platformy jaką jest SPOJ. Wszystkie zadania są zrobione pod C++, testy często mają różne dziwne błędy, brak omówień zadań, nieścisłości w zadaniach. Jeśli chcesz poćwiczyć Pythona i troszkę pomyśleć to zapraszam na https://leetcode.com/ a jeśli bardziej chcesz skupić się na algorytmice to https://codeforces.com/

twój pomysł można było uprościć, do tego w testach są puste linie które crashowały twój program. Po zmodernizowaniu do:

import math

def main():
    t = input()
    while t == '':
        t = input()
    t = int(t)

    i = 0
    while i < t:
        n = input()
        if n == "":
            continue
        n = int(n)
        cnt_zeros = 0
        x = 5
        while x <= n:
            cnt_zeros += n // x
            x *= 5
        print(cnt_zeros)
        i += 1
main()

dostaje Przekroczenie czasu, ponieważ zadanie jest zrobione pod C++ i jego prędkość (oraz wczytywanie danych). Po przepisaniu twojego pomysłu do C++ dostaje AC

#include <bits/stdc++.h>

using namespace std;

int main(){
	int t;
	cin >> t;
	for (int i = 0; i < t; i++){
		long long n, cnt_zeros = 0, pow5 = 5;
		cin >> n;
		while (pow5 <= n){
			cnt_zeros += n / pow5;
			pow5 *= 5;
		}
		cout << cnt_zeros << "\n";
	}
	return 0;
}

Więc cokolwiek chcesz poćwiczyć, uciekaj od SPOJ-a.

komentarz 17 sierpnia 2021 przez rtworek Nowicjusz (160 p.)

Cześć,

dzięki za odpowiedź. Pierwszy program w Pythonie napisałem tydzień temu, więc dopiero się uczę - robię to hobbystycznie, nie pod żadną olimpiadę.

Natknąłem się na identyczne zadanie na SPOJ.com - spoj.com/problems/FCTRL/.
Tam mój kod przeszedł bez problemu.

Jednocześnie zgadzam się z tym, że problemy ze SPOJ nie koniecznie są przyjazne dla Pythona - robię obecnie zadanie związane z sortowaniem bąbelkowym - ciągle otrzymuję przekroczenie czasu mimo, że zoptymalizowałem kod (nie wykonuje kolejnych iteracji dla ciągów posortowanych). No nic, bardzo dziękuję za pomoc! :)

0 głosów
odpowiedź 16 sierpnia 2021 przez Wiciorny Ekspert (269,120 p.)

cytując tutaj będzie problem 

 Program ma się zakończyć, gdy skończą się wejścia. Obecnie program albo się nie kończy (jeśli w interaktywnej konsoli), albo crashuje (gdy wejście wchodzi strumieniem).

komentarz 16 sierpnia 2021 przez rtworek Nowicjusz (160 p.)

Chyba mówimy o dwóch różnych problemach ze SPOJ.
Warunki są wyraźnie opisane w treści zadania:

KART - Kartkówka

Wejście
Liczba t < 10^5 oznaczająca liczbę testów. Każdy test składa się z jednej liczby n < 2^30.

Wyjście
Dla każdej liczby n z wejścia wypisz liczbę zer, którymi kończy się liczba n!.

Przykład

Wejście:
3
2
10
12

Wyjście:
0
2
2
komentarz 16 sierpnia 2021 przez Wiciorny Ekspert (269,120 p.)
podejrzewam problem z czasem z racji ilości pętli w takim razie, trudno mi to debuggować, nie piszę w pythonie, ale spróbuję to przeanalizować
 

PS: uwzględniłeś fakt, że mogą pojawić się puste linie w testach ?

Podobne pytania

0 głosów
1 odpowiedź 359 wizyt
pytanie zadane 21 czerwca 2021 w Python przez Dron Początkujący (280 p.)
+1 głos
1 odpowiedź 293 wizyt
pytanie zadane 19 sierpnia 2021 w Python przez jamie80 Początkujący (320 p.)
0 głosów
2 odpowiedzi 1,130 wizyt
pytanie zadane 2 maja 2019 w Python przez TomJar Nowicjusz (230 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...