Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

MBZLICZ - Policz podzielniki

Parę dni temu otrzymałem wiadomość od pani profesor Marii Sędziospoj. Skarży się w niej na przepracowanie, bezsenność, bóle głowy i kręgosłupa oraz kłopoty ze wzrokiem. Narzeka też, że musi strasznie dużo zużywać papieru i tuszu na swojej wysłużonej drukarce igłowej a już szczególnie jak sprawdza zadanie "Już po EURO! ;-(" i drukuje tysiące liczb, spoko, koko i spokokoko. Strasznie ją to wkurza i prosi mnie, jako autora tamtego zadania, abym coś z tym zrobił. Wpadłem na genialny w swojej prostocie pomysł i zaproponowałem, aby liczyć tylko wystąpienia linii nie zawierających liczb i porównywać ze wzorcem. Wiem, że nie jest to pewne na 100% sprawdzenie, ale w ten sposób można odfiltrować  złe odpowiedzi a pozostałe sprawdzić tradycyjnie. Pani Sędziospoj pomysł przypadł do gustu, ale wykonanie już niekoniecznie. Stwierdziła, że w moim programie nie ma wcięć i są makra, że chyba napisałem go na kolanie [to prawda] i że program jest za wolny. Dlaczego, Ty, nie mógłbyś, napisać [na wczoraj] fajniejszy, w dowolnym języku taki właśnie program. Dzięki temu, profesor Sędziospoj  będzie miała więcej czasu na sędziowanie, na przeliczanie rankingu i wyświetlanie go w ładniejszej formie ;-).

PS

Pani Mari pomysł tak przypadł do gustu, że chce mieć bardziej uniwersalne narzędzie do sprawdzania podzielności wielu liczb w możliwie dużym zakresie liczbowym i różnej formie wprowadzania i wyprowadzania danych. Aby sprawdzić popawność działania programów, pani Profesor przygotowała następujące testy (trzeba zaliczyć minimum 4):

TESTY

TEST nr 1.

100 malejących liczb, każda liczba w oddzielnej linii, dokładnie tak jak w zadaniu MBSPOKO "Już po EURO!". Odpowiedzią, jest jedna liczba, można ją bardzo łatwo obliczyć dowolną metodą. Ten test jest kategorii "łatwiejszy niż łatwy". ;-)

TEST nr 2.

Najpierw ilość zestawów Z, potem w Z liniach liczby a, b, dolna i górna  granica zakresu zbioru liczb naturalnych, następnie liczba n a na końcu od k1 do kn liczb, dla których będziemy sprawdzać podzielność liczb ze zbioru {a,b}.

Zakresy: Z<100; 100<=b<2^31, n<=4;  k1 .. kn>0

Wejście:
2
3 1001 2 3 5
9 2000  4 9 11 13 15
Wyjście:
467
581

TEST nr 3.

Brak danych.  Plik z kilku pustymi liniami lub innymi "białymi" znakami. Program musi wypisać tekst:
error-1 brak danych!

TEST nr 4.

Brak danych. Plik zawiera tekst i liczby nie spełniające założeń zadania - pojedyńcze liczby mniejsze od 100. Program musi wypisać tekst:
error-1 brak danych!

TEST nr 5.
Połączone ze sobą po kilka i w dowolnej kolejności testy typu 1, 2 plus puste linie i linie z tekstem lub linie z danymi zakończone tekstem, pomieszane z danymi,  które nie są traktowane jako błąd, ale jako ewntualny komentarz i są ignorowane.

Wejście:

2

1 100 2 3 5  komentarz

pusta linia lub linia z tekstem - traktowana joko komentarz

1 100 2 3 5

Wyjscie:

47

47

TEST nr 6.

Jak test 5 ale zamiast ciągu 100 liczb [test nr 1] może pojawić się większy lub mniejszy od 100 ciąg malejących liczb. Po obliczeniu jak dla 100 liczb, dodatkowo w następnej linii, tylko gdy ich liczba była różna od 100, należy wypisać komunikat błędu z podaniem ilości wczytanej sekwencji liczb np dla 101:
error-2 zamiast 100 --> 101 wartosci!
Może zabraknąć wartości Z, lub Z może być błędne. Ilość zestawów Z w teście, zawsze jest dużo mniejsza od 100. Liczby mniejsze od 100, jeżeli nie są w "ciągu" malejących liczb, należy traktować jako Z i można je pomijać, dane i tak, trzeba odczytać do znaku końca pliku eof. Jeżeli w danej linii brakuje danych, ale jest przynajmniej jedna liczba większa od 100, należy przyjmować domyślnie a=1, b=liczba, k1=3,k2=5.

Wartość n w następnych testach będzie przeważnie pomijana. Jeżeli z obliczeń będzie wynikała błędna wartość n, to należy potraktować ją jako pierwszą wartość k - wartość k1. 

Wejście:

100
99
98
96           // przerwana kontynuacja ciągu 100 liczb musimy wypisać błąd

               // liczbę 96, ponieważ nie jest kontynuacją 100 ..., traktujemy jako wartość Z [96<100] i ją pomijamy
10000   // domyślnie a=1, b=10000, k1=3, k2=5

Wyjście::
47
error-2 zamiast 100 --> 3 wartosci!
4667

TEST nr 7.

Jak test 2 ale większe zakresy tzn b >> 2^64  

Wejście:

3

1   111111 2 3 5
1   111111 4 5 7 13 19
1   111111111111111111111111111111111111111111111111111111111 2 3 5

Wyjście:

51852
44484
51851851851851851851851851851851851851851851851851851852

TEST nr 8.

Pomieszane wszystkie zestawy i dodatkowo n przed "uproszczeniem" może być większe od 12.

Wejście:

10                           // pomijamy błędne Z
1 10000 0 0 0 0 1 1 1 6 12 9 12 0 0 3 10 5 1 //   brak błędna wartość n,
                              // pomijamy 0 , 1, powtarzalne i wielokrotności ki
1 10000 2 3 5
10000 3 5          // a=1,  b=10000, brak n, liczbę 3 traktujemy jako k1
// pusta linia


10000 // b=10000, domyślnie a=1 k1=3, k2=5

10000 // poniżej jest liczba 9999, o 1 mniejsza - więc 10000 jest traktowane jako początek ciągu 100 liczb 

9999

Wyjście:

4667
4667
4667
4667

47

error-2 zamiast 100 --> 2 wartosci!

TESTY nr 9 i 10.

Jeżeli w treści testu w dowolnej linii na jej początku wystąpi litera 'v' poprzedzona '-', powinna być potraktowana jako "przełącznik -v" włączjąca i wyłaczająca wyświetlanie uproszczonej ramki i rozszerzonego wyniku obliczeń. Ramka jest zawsze zamykana albo drugim przełącznikiem -v albo gdy jest koniec pliku. Nagłówek ramki składa się z tekstu: 'granice zbioru: a b, dzielniki [k1, .., kn], wynik'  i 2 linii z 52 znaków '='. Zakończenie ramki to 52 znaki '-'. Przełączniki mogą się pojawiać wielokrotnie, włączając i wyłączając wyświetlanie tabelki.

Wejście:

-v

1000

1000 3

1000 5

1000 15

-v         // nadmiarowy -v, koniec pliku powoduje to samo, narysowanie dolnej krawędzi tabelki.  

Wyjście:

====================================================

 granice zbioru: a b, dzielniki [k1, .., kn], wynik

====================================================

1 1000 [3, 5] 467

1 1000 [3] 333

1 1000 [5] 200

1 1000 [15] 66

----------------------------------------------------

 


Dodane przez:narbej
Data dodania:2012-06-21
Limit czasu wykonania programu:0.200s
Limit długości kodu źródłowego50000B
Limit pamięci:1536MB
Cluster: Cube (Intel G860)
Języki programowania:All except: GOSU
Pochodzenie:Ross K.A., Wright Ch.R.B.: "Matematyka dyskretna", wydanie 5, PWN 2008
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.