From: | "Mihai Patrascu" <mihai_p@pcnet.ro> | Block Address | Add to Address Book |
To: | "probleme" <probleme@ldc.ro> |
Subject: | diverse probleme |
Date: | Sun, 11 Mar 2001 20:22:34 +0200 |
|
|
Problema "un alt fel de hanoi" e chiar banala daca poti face O(N**3)
mutari.
Sa vedem cine e tare la float-uri... Facem un Belman-Ford cu distantele
float-uri (sau double, nu conteaza):
{
float a[MAXN], d[MAXN][MAXN];
int chg, i, j;
for(*a = 0.0, i = 0; i < n; a[i++] = 1.0/0.0) ;
do {
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(a[j] > a[i] + d[i][j])
a[j] = a[i] + d[i][j], chg = 1;
} while(chg);
}
Am implementat ceva cam asa de curand si intra intr-o bucla infinita.
Intrebare didactica: ce trebuie schimbat pentru ca sa nu intre
niciodata
intr-o bucla infinita? [daca credeti ca e corect, va inselati; motivul
pentru care s-a blocat nu e ca existau cicluri negative] Asta e bine de
stiut la concursuri, caci pe teste mici&normale nu se intampla nimic,
doar
pe teste mari&ciudate Belman-Fordul de mai sus se blocheaza...
Intrebare (dificila) pentru programatorii veterani: de ce poate intra
in
ciclu infinit?
========= Algoritmi aplicati in practica
Presupun ca multi ati auzit de algoritmul move-to-front (pe la
compresii).
Chestia e cam asa: tii o lista cu caracterele (0..255) si la fiecare
caracter din fisierul de intrare scrii la iesire pozitia lui in lista,
dupa
care il muti primul in lista. Challenge-ul este cum implementezi asta
astfel
incat pentru fiecare caracter sa fie O(logK), unde K e pozitia
caracterului
in lista inainte de a-l muta primul.
========= O problema de concurs
Se da un lac de MxN patratele, acoperit cu gheata, exceptand unele
patratele
care se citesc din fisierul de intrare. O broasca trebuie sa mearga de
la
(1,1) la (M,N) si sa se intoarca inapoi. Ea face sarituri ca calul la
sah.
Evident, ea nu poate pasi decat pe gheata. Problema e ca unde paseste
ea se
sparge gheata, deci nu poate trece printr-o patratica de doua ori.
Aflati
itinerariul cu numar minim de sarituri. [se cere nr. min de mutari;
reconstituirea daca aveti o zi ploioasa la dispozitie]
Problema s-a mai dat, dar noutatea e ca de data asta nu se accepta
back-uri
(M,N<=100 de ex.).
Sa nu ziceti ca n-aveti probleme! BTW, mai dati si voi probleme
interesante,
vin concursurile si nu stiu unde mai pot gasi probleme noi.
mihai_p
Privacy Policy-
Terms of Service
-
Guidelines
Copyright © 1994-2001
Yahoo! Inc. All rights reserved.