nbobo koju si strukturu koristio za ovaj zadatak?
niz od 1 000 000 elemenata moze da prodje al ako je to niz od slogova koji imaju 3 ili 2 elementa nema sanse?
dPa ako ti 2 elementi su od tipa longint, onda ukupna golemina je:
2*4*1000 000 = 12MB,
a ogranicenje u zadatak je oko 8MB
npa da, pa da...
veoma je malo memorijsko ogranicenje, pa bih da cujem bobu posto je on to odradio!
:]
npa ... kako si to upotrebio?
:]
mislim, ajd da si rekao listu ili nesto slicno pa i nekako, al' ovako ne vidim vezu izmedju binarnog stabla i pomeranja peska po ravni ... !
bPa kad napravis neki korak ubacis polje ako ne postoji, ako postoji samo vec postojecu vrednost uvecas za jedan i to ti je to. Ima lepse resenje, ali ja sam radio ovako. Lepse resenje nije moje, pa necu ni da ga delim :)
nsvatio sam sta si hteo da kazes...
:]
al, jel mozes, molim te, (kad budes imao vremena) da pogledas kako sam ja to zamislio i isprobao, ali mi pada na vremenu?
pojma nemam zasto pada - meni za neke moje primere prolazi i to vrlo lepo!
+ sam otkucao vrlo uredno tako da je lako za analizu!
(ako ce ti biti lakse poslacu na mail!)
:)
npromenio sam while petlju koja je ulazila u mrtvu petlju ali sada je ona problem sto se previse sporo sve odvija tako da za 3 cetvrtine testova pada na vremenu a ostalo je dobro...
:(
bZnam da mogu da skinem, ali mozes mi AKO TE NE MRZI poslati na mejl, pa cu pogledati vevceras. Malo sam "kratak" sa vremenom u poslednje vreme.
rnisam upucen u AVL , ali predpostavljam sledece :
ako se pri svakoj komandi pesak pomera na polje koje do sad nije zabelezeno onda se stvara novi element , tj. i tu postoji mogucnost stvaranja 1 000 000 elemenata?
Ako je tako , onda se mozda zadatak moze uraditi dvostruko povezanim listama (sa pointerima).
Poz.
dAVL je optimizacija na binarno drvo, koja garantira da negova dubina nece biti veca od logn. A resenje sa liste moze i da radi, ako koristis vector u C++, i ako dobro implementujes binary search. Probaj, ali ne verujem da ces uspeti da implementiras binary search nad vector.
drenovator, ne muci se, ja sam probao i pada na vremenu, samo na prvi 5 primera je proslo... Meni nije jasno zasto nije proslo, slozenost je cisto O(nlogn). Najverovatno insert u vector nije O(1)??
dhehe, ke treba ja i ti da naucimo neko balansirano drvo (AVL) :)
rpa da .. naucicu AVL , ali probacu da uradim ovaj zadatak sa vectorima bez Insert-a.Znaci samo alociranje memorije i binarno pretrazivanje.
Iako predpostavljam da ce pasti na nekim primerima, probacu.
Insert u vectoru je slozenosti O(n) , bar ja tako mislim posto je to niz a ne povezana lista.O(1) je u listi.
Pozdrav.
rma ,kad bolje razmislim ,sto bi se mucio da radim zadatak kad znam da nece proci :)
search for AVL ... (mada stalno razmisljam o onom sto boba rece da postoji lepsi naci za rad ovog zadatka).
pozdrav.
ripak sam uspeo da ispisem zadatak na drugi nacin.
Medjutim , za primere >9 mi ispisuje da je greska nastala za vreme izvrsavanja.
Ako bi neko mogao da pogleda i pokusa da pronadje izvor moje greske bio bih mu mnogo zahvalan.
nego mislim da je bolje da vam posaljem na mail nego da ga uploadujem negde.
uz to cu vam i poslati objasnjenje rada (nije komplikovano).
pozdrav.
Relja.
bMozda postoji sansa da ti puca zbog prekoracenja memorije. Ti svakako dinamicki zauzimas memoriju (bar sam tako shvatio) pa je mozda to.
rda , tako sam i mislio nego malo me bunilo sto ne pise Prekoracen memorijski limit...Ali ta greska se javlja samo kod staticki alocirane memorije.Kada sam postavio matricu 300x300 prolazio je na 12-13 primera , ali vreme je ogranicavajuci faktor :)
Pozdrav.
bPa zato sto ti treba puno dok ne nadjes da li si vec ubacio, zato i treba da se koristi neka druga struktura podataka ili neka bolja ideja :)
rI dalje mi nesto nije jasno ...
za svakog cvora u stablu potrebno je pamtiti 3 informacije (obelezje, levosin, desnisin) ... i u najgorem slucaju ce se napraviti 1 000 000 cvorova ...
kako onda nije moguce da se naprave 2 niza od 1 000 000 elemenata (longint)?
fpozdrav svima!
ja imam slijedeci problem; tice se konkretno ovog zadatka ( z-pesak ) :
kada posaljem ovaj kod:
#include <cstdio>
#include <utility>
using namespace std;
struct a {
unsigned char con[3];
};
pair< a, a > V[ 1000001 ];
int main( void ) {
return 0;
}
dobijem poruku da program nije vration nulu. ne mogu nikako shvatiti zasto: memorijsko ogranicenje nije prekoraceno, nije niti vremensko. jesam li sto propustio ?
rpa izgleda da nesto nije u redu..
Kada bi isti kod iskucao u pascalu, ne bi bilo problema..
Nesto dodatno opterecuje memoriju...
n[q]Najverovatno insert u vector nije O(1)??[/q]Ne.
Obicno polje koje se realocira po potrebi.
Moze mi tko objasnit ukratko razliku izmedju AVL i RB stabla?
aAVL i RB stabla su vrsta binarnog stabla pretrage, a razlikuju se samo u definiciji uravnotezenosti (koja je jelte potreba da bi garantovala slozenost logN). AVL stablo kaze da je apsolutna razlika visine levog podstabla i desnog podstabla manja ili jednaka 1, dok RB stablo kaze da na na svakom putu od cvora do njegovih listova (listova u njegovom podstablu) ima jednak broj crnih cvorova.
AVL: http://en.wikipedia.org/wiki/AVL_tree
RB: http://en.wikipedia.org/wiki/Red-black_tree
lAl koju god strukturu uzimas, ako uzimas 2 int-a za koordinate, prekoracit ces memory limit jer je 2*4*1000000 = 8000 KB a dozvoljeno je 7168 KB ?
bKoristi short umesto int-a, ali tako što ćeš da pamtiš kretanje po modulu nekog levog broja iz opsega short.
lProblem u inputu?
Probo sam ucitavat sa: (char s[25]; int n;)
1) scanf("%d\n", &n); pa dalje sa gets(s) za komande
2) scanf("%d%*c", &n) pa dalje sa gets(s) za komande
3) scanf("%d", &n); pa fflush(stdin) pa dalje gets(s) za komande
Napravio sam da program odmah nakon ucitavnja podataka ispise neko bezveze rjesenje ali program niti ne dodje do tam i vec premasi vremensko ogranicenje i to na svim test primjerima i na sva 3 gore navedena nacina. U cemu je problem?
lIzgleda da nekej ne valja s zadatkom jer opet ne prolazi na ni jednom test primjeru (cak i ako maknem sortiranje tj. ostavim samo ucitavanje). Evo source:
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#define MAX 1000002
using namespace std;
struct broj {
char a; short b;
broj() {}
inline broj(int x) {
a = x/32000;
b = x%32000;
}
};
bool operator<(const broj& a, const broj& b) {
if(a.a < b.a) return 1;
if(a.a > b.a) return 0;
return a.b < b.b;
}
bool operator==(const broj& a, const broj& b) {
return a.a == b.a && a.b == b.b;
}
bool operator==(const pair<broj, broj>& a, const pair<broj, broj>& b) {
return a.first == b.first && a.second == b.second;
}
struct comp {
bool operator()(const pair<broj, broj>& a, const pair<broj, broj>& b) {
if(a.first < b.first) return 1;
if(b.first < a.first) return 0;
return a.second < b.second;
}
} mojsort;
pair<broj, broj> a[MAX];
int main() {
int n; char s[10];
int x = 1000000, y = 1000000;
scanf("%d", &n);
a[0] = make_pair(broj(x), broj(y));
for(int i = 1; i <= n; ++i) {
scanf("%s", &s);
if(s[2] == 'r') ++y;
else if(s[2] == 'l') --y;
else if(s[2] == 'v') --x;
else if(s[2] == 's') ++x;
else scanf("%*s%*s%*s");
a[i] = make_pair(broj(x), broj(y));
}
//do ovog koraka niti ne dodje vec padne na vremenu do tuda
sort(a, a+n+1, mojsort);
int curr = 1, sol = 1;
for(int i = 1; i <= n; ++i, sol >?= curr) {
if(a[i-1] == a[i]) ++curr;
else curr = 1;
}
printf("%d", sol);
return 0;
}
rproblem nije u vremenu kako pise vec u memoriji..
inace, i ja sam imao prilicno problema sa ovim zadatkom...
Po svemu, tvoj program bi trebao da zauzima ~6MB..
Medjutim, ne znam zbog cega, ali C++ zauzima neki dodatni prostor koji
dovodi do memorijskog prekoracenja..Savetujem ti da isti program iskucas u
Pascalu i to bi trebalo da radi..Ako ti ni to ne uspe probaj sa obicnim, ne 100%, ali skoro nepogresivo tacnim hashom ;).
D#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
vector<int>A,B;
A.push_back(0);
B.push_back(0);
int n,x=0,y=0,i,j,MAX=0;
string s;
cin >> n;
for(i = 0; i < n; i )
{
cin >> s;
if( s == "Gore")
y = 1;
if( s == "Dole")
y -= 1;
if( s == "Levo")
x -= 1;
if( s == "Desno")
x = 1;
A.push_back(x);
B.push_back(y);
}
int time = 0;
for( i = 0; i < A.size(); i )
{
for( j = 0; j < A.size(); j )
{
if((A[i] == A[j]) && (B[i] == B[j]))
time ;
}
if(time > MAX)
MAX = time;
time = 0;
}
cout<<MAX<<endl;
return 0;
}
Ljudi pomozite mi, ovo je moj kod, i bar ja mislim da radi, ali zbog nekih razloga mi u pola primjera dode "Time limit exeded", i u drugoj polovici "Execution error or Memory limit exeded".
Need help!!!!!
DCITA LI KO OVE POSTOVE__???
nCitam ja ali ne verujem da ti to nesto znaci jer ne znam c i c++ pa ne kapiram tvoj kod a i nisam ni resio ovaj zadatak :)
nResio sam ga sad, ali sa skoro 30 mb a dozvoljeno je 7 :)
Sinula mi neka ideja, ja je ispisao, proverio da li radi, obradovao sam se kad sam video da radi, poslao i razocarao se kad sam skapirao da nisam obratio paznju na memoriju :)
Moram da pogledam taj AVL, jer ovako ne ide, a bas mi je zao, 100% je tacno resenje.
grjesenje koje pretpostavljam da imas je vrlo jednostavno, probaj uz to iskoristiti hash da smanjiš zauzetu memoriju
DJa sam probao svasta ali dosad jos uvijek bez uspjeha----------
sPa umjesto da pamtis brojeve ( x, y ), pamti samo broj ( x * P + y ), gdje je P neki prosti broj.
To ce duplo smanjiti memoriju i proci u C++-u.
Ako koristite vectore, obavezno stavite reserve ili resize, inace se kod svakog push_backa rezervira duplo veca memorija nego treba.
I da, push_back je O( 1 ), ne O( N ) :)
DMeni ocito ne ide, evo linka za kod : http://www.z-trening.com/new/www/html/submit.php?submit=7100003862&subm_code=1 . Ja sam probao u toj funkciji i proste kako si rejao i sta ja znam sta vise nisam, ali mi uvijek javlja wrong result.
Ipak uzmimo primjer x = 2, y = 4, a nek prosti broj bude 7, tj. F(x,y) = 18,
u drugu ruku x = 1, y = 11, sto je isto 18, nisam upoznat bas sa tim, jer sam nov u programiranju ali ove hash funkcije bi javljale u nekim primjerama gresku. Gdje gresim....?
gne mozes uzeti tako mali prost broj..probaj uzeti neki veci od milijun
DMa nema veze koji god broj stavim isto je, 10000003, ili sta ja znam. Stvarno mi je ne shvatljivo kako radi kod vas....
DUspjeo sam napraviti, greska je po meni u zadatku. jer za unos u string, tokom poredenjem nesto nije bilo u redu. al sad radi^^
gkad tako usporedjujes stringove, dovoljno ti je samo prvo slovo..ili negdje drugo jer i tako možeš razlikovati naredbe