Funkcja
Limit pamięci: 32 MB
Dana jest pewna funkcja
.
Funkcja ta jest z początku nieznana
i Twoim zadaniem jest wyznaczenie jej używając operacji
z dostępnego modułu.
Wszystkie operacje działają na zbiorze testowym
.
Na początku
.
Do modyfikacji zbioru
dostępne są operacje:
- dodaj(
) - dodaje element
do zbioru
,
- usun(
) - usuwa element
ze zbioru
.
służy operacja pytaj(
),
która mówi, czy
.
Zadanie
Napisz program, który znajdzie funkcję
używając możliwie najmniejszej łącznej liczby operacji.
Interfejs biblioteki
W tym archiwum udostępniona jest przykładowa implementacja biblioteki.
Biblioteka zawiera 5 funkcji/procedur.
- parametry(
,
) - ta procedura powinna być wywoływana raz na początku programu
w celu poznania parametrów testu.
Na zmienne
i
,
, zostaną przypisane odpowiednio
rozmiar dziedziny funkcji i rozmiar przeciwdziedziny.
- dodaj(
) - dodaje do zbioru
wartość
.
- usun(
) - usuwa ze zbioru
wartość
.
- pytaj(
) - ta funkcja zwraca 1 jeśli
i 0 w przeciwnym przypadku.
- wynik(
) - ta procedura powinna zostać wywołana raz na zakończenie programu
podając funkcję
.
Funkcja reprezentowana będzie przez tablicę składającą się z wartości
.
C/C++
Nagłówki funkcji:
void parametry(int *n, int *m); void dodaj(int y); void usun(int y); int pytaj(int x); void wynik(int *f);
Kompilacji programu wraz z modułem można dokonać za pomocą polecenia:
g++ -O2 -static fun.cpp funlib.cpp -lm gcc -O2 -static fun.c funlib.c -lm
Pascal
Nagłówki funkcji i procedur:
procedure parametry( var n,m: longint ); procedure dodaj( y: longint ); procedure usun( y: longint ); function pytaj( x: longint ):longint; procedure wynik( f: array of longint );
Do kompilacji można posłużyć się poleceniem:
ppc386 -O2 -XS fun.pas
Sprawdzanie
W każdym teście będzie ustawiony pewien sztywny limit na liczbę operacji. Program zaliczy dany test, jeżeli nie przekroczy limitu operacji oraz poda poprawną funkcję. W związku z tym, w większości testów nie ma konieczności używania minimalnej liczby operacji, aby przejść dany test. Testy i limity na liczbę pytań będą ustawione w ten sposób, aby programy zadające mniejszą liczbę pytań dostały więcej punktów.
Należy wysyłać sam program, a nie bibliotekę. Program będzie kompilowany z biblioteką. Nie wolno czytać ze standardowego wejścia, ani pisać na standardowe wyjście.
Przykład
W teście przykładowym przyjęte są parametry
i
,
a funkcja przyjmuje wartości
.
Limit na liczbę pytań ustawiony jest na
.
Poniżej przykładowa interakcja programu z biblioteką.
| wywołanie funkcji | wynik |
| parametry(n, m) | |
| dodaj(0) | |
| pytaj(0) | 0 |
| pytaj(1) | 0 |
| pytaj(2) | 0 |
| dodaj(1) | |
| pytaj(0) | 1 |
| pytaj(1) | 1 |
| pytaj(2) | 0 |
| dodaj(2) | |
| pytaj(2) | 0 |
wynik( , , ) |
Autor zadania: Jakub Pawlewicz (na podstawie zadania z IOI 1995).
<Wyślij rozwiązanie> [0/100]

