Napravio sam jednostavnu hash funkciju koja za 10 random generiranih primjera sa N=1000000 ne baca ni jednu koliziju... takodjer moji test primjeri rade dobro.... pa bih molio admina bilokoji test primjer sa zadatka da vidim u cemu je stvar
[z-pesak]
Probaj samo da razlikujes komande prema trecem znaku. Jer nesto neradi kada se pregledava cijela komanda od jednom. Barem sam taj problem ja imao...
mislim da je problem u naredbi "Ostajem na ovom polju" jer ti ona (za ulaz jednog stringa) zauzme zapravo tri, pa onda ako naides na "Ostajem" samo stavi da unese jos 3 stringa ili s kim vec radis
Neslazem se s tobom. Get.line ucitava cijelu recenicu sto bi trebalo biti ok, ja sam koristio gets sto je isto. A inace se slazem sa Amtrixom,, kod mene je bio isti problem. Nemoj porediti stringove vec tii je dovoljno samo jedno slovo, to je i bila kod mene greska.
neznam kako je tko unosio, samo sam rekao da sam ja to pogrešno napisao, iako mi je još uvijek nije prošao :P
Bas gledam tvoj kod, pa evo i tebi mala pomoc. U hash funkciji uzmi veci broj mislim da bi 1000000 trebao biti dovoljno. Znaci bit ce Hash(x,y)=(x*1000000)+y:Ako i dalje neradi javi...
neznam da li radi ispravno jer za svaki test primjer prekorači memorijsku granicu ....
Prvo ispravi ovo, else {scanf("%s%s%s");}. Ti tu trebas u necemu unijeti te stringove. Deklariraj jedan string pa u njega unosi otprilike ovako: else scanf("%s%s%s",&tmp,&tmp,&tmp);. Ako i dalje ne radi javi...
sad je sve pogrešno rješenje
našao sam grešku i sad radi, hvala
Ok, sad ovdje u ovoj petlji gdje provjeravas.
for(x=0;x<n;++x){
if(v[x]==v[x+1])tx++;
else{if(ty<tx){ty=tx; tx=1;}}
}
Ti ovdje "tx" postavljas samo na 1 ako ti je tx veci od ty. a sta ako je manji? Znaci kad vise nisu isti onda u bilo kom slucaju moras postaviti na 1.
for(x=0;x<n;++x){
if(v[x]==v[x+1])tx++;
else{if(ty<tx){ty=tx; tx=1;}}
}
Ti ovdje "tx" postavljas samo na 1 ako ti je tx veci od ty. a sta ako je manji? Znaci kad vise nisu isti onda u bilo kom slucaju moras postaviti na 1.
u meduvremenu ti uradio,,,,,
hvala na pomoci dosada...
ispravio sam da gleda samo 3. znak ulaza a ne cijeli string i imam 13/20... Jos uvijek ne mogu nac gresku. Koristim ove 2 funkcije:
inline long long int aabs (const long long int &a) { return (a < 0) ? -a * 11301 : a; }
inline int hashit (const int &a, const int &b) { return aabs (a*14698713+b*1737371) % 1000000; }
ispravio sam da gleda samo 3. znak ulaza a ne cijeli string i imam 13/20... Jos uvijek ne mogu nac gresku. Koristim ove 2 funkcije:
inline long long int aabs (const long long int &a) { return (a < 0) ? -a * 11301 : a; }
inline int hashit (const int &a, const int &b) { return aabs (a*14698713+b*1737371) % 1000000; }
ja nisam radio funkcije , nego sam samo kad sam prepozano kretnju, uvećao x ili y koordinatu i onda samo u nastavku zapisao u vector, npr v[x]=11301*x+y;.
robi_petranovic:
mislim da je greska kod tebe sto se moze destiti da dvije razlicite coord imaju istu HASH vrijednost probaj da HASH pamtis redom u nizu odnosno:
int keys[100000]; // ovdje cuvamo rezultate HASHA
int size=0;
i onda ovako dodavaj vrijednoste u tom nizu:
keys[size++]= HASH(x,y) // sa time neces trebati raditi modulo u hashu,
na kraju jedino sto trebas uraditi je
sort (keys,keys+size)
I zatim napravis brojac i izracunas koja se vrijednost najvise javlja u tom nizu.
mislim da je greska kod tebe sto se moze destiti da dvije razlicite coord imaju istu HASH vrijednost probaj da HASH pamtis redom u nizu odnosno:
int keys[100000]; // ovdje cuvamo rezultate HASHA
int size=0;
i onda ovako dodavaj vrijednoste u tom nizu:
keys[size++]= HASH(x,y) // sa time neces trebati raditi modulo u hashu,
na kraju jedino sto trebas uraditi je
sort (keys,keys+size)
I zatim napravis brojac i izracunas koja se vrijednost najvise javlja u tom nizu.
Da, nemoj sebi bezveze komplikovati zivot. Dovoljna ti je jedna Hash funkcija, za npr. hash(x,y)=x*1000000+y.
I u nizu pamtis rezultate. Onda sortiras niz kao sto je Amtrix vec rekao i vidis koliko ima najvise slicnih u tom nizu. To ti je onda rezultat..
I u nizu pamtis rezultate. Onda sortiras niz kao sto je Amtrix vec rekao i vidis koliko ima najvise slicnih u tom nizu. To ti je onda rezultat..
hvala svima na pomoci.... uspio sam rjesiti zadatak ;)
Ja sam koristio map<> ali je presporo , prolazi samo na 9 primera. Gde ima tutorial za hash funkcije ili hash nesto?:D
recimo
u keys spremas hashirana polja i na kraju sortiras, te redom pregledavas...
long long hash ( int x, int y ) {return x*1003+y;}
keys[100000]; u keys spremas hashirana polja i na kraju sortiras, te redom pregledavas...
Nisam bas razumeo... Sve sto znam za hash jeste da ubrzava trazenje elemenata. Treba mi tutorial. Odakle si ti ili ostali naucili hashing?
Hash ti je malo opsirniji pojam, a u sustini ti je dodjeljivanje nekih jednistvenih vrijednosti da bi ti olaksalo neke stvari. Ima tu dosta stvari. Probaj na netu naci kakav tutorial o tome, ili kupi sebi kakvu dobru knjigu za algoritme.
probaj
http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/Hash_function
E legende ste, sta bih ja bez vas... HASH je strava...=)