← Back to topics
Topic

[editor]

r
renovator
Molim nekog da me uputi na greske .Svi primeri koje sam izmislio prolaze ali mi zato ne prolaze 4-10 primeri.Verujem da je neka sitnica.

Evo koda i trudio sam se da bude uredan :

http://rapidshare.de/files/8629625/edit.pas.html
b
boba5551
Ovaj kod je mnogo bolji za razliku od prethodnog.
Pogledao sam kod i deluje ok, mada ne znam bas najbolje funkcije sa stringovima. Ono sto je mene malo zezalo, jeste sto nisam pazio kad se nalazim na pocetku ili kraju. Mozda je i kod tebe nesto slicno. Tipa kad imas prazan string...
Trazi od Admina test primer jedan, pa provali gde puca.
Pozdrav,
p
petko
String moze da ima najvise 255 karaktera a "maksimalna duljina teksta ce biti 100,000 znakova." tako da tebi program radi ako je duzina texta <=255.
Tako da probaj da izbegnes stringove :)!
s
sanja
Jel bi to lepo radilo s AnsiStringovima?
b
boba5551
Ja sam radio preko pokazivaca, a neki su radili preko niza char od 100000 elemenata. Ti izaberi kako hoces!
p
petko
Mislim da kod AnsiStringova ne rade lepo procedure insert,delete.......
Najbolje je da se radi preko niza charova ili ovako kao sto je Boba radio!
r
renovator
Ali ja sam pokusavao da dodelim promenljivoj tipa string nizove od 100000 znakova i da vrsim operacije nad njima i uspevalo mi je i bilo mi je cudno jer sam pre toga cita da string podrzava 255 ali probacu kako ste mi vi rekli.
Hvala svima
s
sanja
OK. Tnx
r
renovator
E ljudi , opet se javljam jer ga jos nisam resio.Problem mi predstavlja to sto ne znam kako da realizujem da moze da se ucita vise od 256 znakova u komandnoj liniji.Moze li pomoc .Kako da ucitam niz od 100000 elemenata(tipa Char)?
d
dimitar
Ne muci se sa tim charovi, najbolje (i najintuitivno) ti je da koristis double
linked list.
r
renovator
OK , samo malo da je proanaliziram.Jos uvek sam taz u ovom 'svetu' algoritama.
b
boba5551
Malo kasno se javljam, ali pretpostavljam da znas da je Dimitar mislio na dvostruko povezanu listu, znaci da koristis pokazivace i mislim da je to i najlakse za shvatiti, a radi brzo!
r
renovator
Ok sad znam sta su te liste , nego i dalje ne mogu da provalim kako da u consolu ucitam vise od 256 znakova.Kada unosim znakovni niz pokazivac se zaustavi na 256-om znaku.Radim u Delphi Pascalu ,mozda je do toga ??
b
boba5551
Evo saljem ti moj kod koji cita, pa provali.
Ti treba da citas karakter po karakter.

type
List=^TList;
Tlist=record
next,prev:List;
c:char;
end;
var
L:List;

procedure Insert(c:char;var L:List);
var
tmp:List;
begin
if L=Nil then
begin
New(L);
L^.next:=Nil;
L^.prev:=Nil;
L^.c:=c
end
else
begin
tmp:=L^.next;
New(L^.next);
L^.next^.next:=tmp;
L^.next^.prev:=L;
L^.next^.c:=c;
if tmp<>Nil then
tmp^.prev:=L^.next
end;
if L^.next<>Nil then
L:=L^.next
end;

procedure InsertAtEnd(c:char;var L:List);
begin
if L=Nil then
begin
new(L);
L^.next:=Nil;
L^.prev:=Nil;
L^.c:=c
end
else
begin
while L^.next<>Nil do
L:=L^.next;
new(L^.next);
L^.next^.prev:=L;
L^.next^.next:=Nil;
L^.next^.c:=c
end
end;

procedure InsertAtStart(c:char;var L:List);
var
p:List;
begin
new(p);
p^.c:=c;
p^.next:=L;
if L<>Nil then
L^.prev:=p;
p^.prev:=Nil;
L:=p
end;

L:=Nil;
read(c);
while (c>='a') and (c<='z') do
begin
InsertAtEnd(c,L);
read(c)
end;

Ovo ti je najveci deo, ostao je jos samo deo koji prolazi kroz komande, nadam se da ce ti ovo bar malo pomoci.

P.S. Admin jel' mozes da stavis code tagove?
b
boba5551
Nema na cemu!
Ako budes hteo, mogu ti poslati ceo kod.
r
renovator
hvala na ponudi , ali gledam da sto vise radim sam , jedino ako se bas budem mucio (ali ne verujem da ce tako biti) reci cu ti.
Poz.
d
dimitar
Mnogo je lakse da se ovaj zadatak uraditi u C++, sa
koristenje na STL kontejneri list ili vector. Sve te
operacije insert, delete itd. su implementirani, tako
da nema potreba od zajebavanje sa pokazivaci.
b
boba5551
Pogledao sam i vidim da nisi resio. Sta te sada pati?
r
renovator
Ostavio sam ovaj zadatak,kao i sve ostale ,da ga uradim kad jos malo savladam C++.Za sad znam ono sto mi je ostalo iz PHP-a.Samo jos malo i uradicu ga.A sto se tice toga da li sam razumeo zad.Naravno da jesam , nije mi problem.
r
renovator
I , hvala sto brines o meni :).Posto se spremam za svoje prvo takmicenje iz prog. imam jaku volju da uradim vecinu zad. sa z-t(ali u C++-u).
Jos jednom hvala.
d
darkspirit
Ja sam uradio sa vektor, ali palo je na vreme, mislim da je to zasto ubacivanja elementa u vektoru znaci da neke mora da se pomere za jednu poziciju unazad, a to je sporo u ovom slucaju. Probaco za linked list-on, ali i za to ni sam bas optimist.
b
boba5551
Vektori su inace sporiji zbog nacina na koji se "prosiruju" i "smanjuju", a samim tim i indexiraju polja. Nisam shvatio jel' ovde ima nekih pitanja ili samo komentarises tvoje resenje...?
d
darkspirit
Pa..pitanje je dali sa list bece brze i prodje ili uooste da ne probuvam? :)
b
boba5551
Bice brze (naravno, ako ih uzasno lose implementiras nece, ali verujem da mogu da izuzmem to) za to sto ti treba za taj zad.
i
iggy91
Evo i ja se javljam (cudnog li cuda) zato sto nisam uradio [editor]. Koristio sam dvostruko povezane liste, i na Windowsu (kod kuce) super radi. Medjutim, kada posaljem na Z-Trening, na svakom testu dobijem poruku "Pogresno resenje".

Pregledao sam malo one pointere (procitah na forumu da se pokazivaci na Linux-u moraju eksplicitno postaviti na NULL), i sve mi se cini OK.

Bio bih zahvalan ako bi neko pomogao.

Evo koda:


#include <iostream>
#include <cstdio>
using namespace std;

struct cvor {
cvor *next;
cvor *prev;
char e;

cvor(char ch) { e = ch; next = NULL; prev = NULL; }
cvor() { next = NULL; prev = NULL; }

void insert(cvor *cv, char ch) {
cvor *tmp = new cvor(ch);
if (cv->next != NULL) {
cv->next->prev = tmp;
tmp->next = cv->next;
}
cv->next = tmp;
tmp->prev = cv;
}

void remove(cvor *cv) {
if (cv->prev != NULL) cv->prev->next = cv->next;
if (cv->next != NULL) cv->next->prev = cv->prev;
delete(cv);
}
};

long i,j,n,m;
char ch;
cvor *lista = NULL;

int main() {
cin >> ch; lista = new cvor('-');
cvor *p = lista;
cvor *x = lista->next;
for (;ch != 10;) {
lista->insert(lista,ch);
lista = lista->next;
scanf("%c",&amp;ch);
}
x = lista;

cin >> n;
for (i=0;i<n;i++) {
cin >> ch;
if (ch == 'L' &amp;&amp; x->prev != NULL) x = x->prev;
if (ch == 'D' &amp;&amp; x->next != NULL) x = x->next;
if (ch == 'B' &amp;&amp; x->e != '-') { cvor *tmp = x->prev; x->remove(x); x = tmp; }
if (ch == 'P') {
cin >> ch;
x->insert(x,ch);
x = x->next;
}
}

do {
if (p->e != '-') cout << p->e;
p = p->next;
} while (p->next != NULL);
cout << p->e << endl;

//system("pause");
return 0;
}

i
iggy91
I da, zaboravih da kazem: bilo bi super kada bi, uz vasu pomoc, uspeo da prepravim ovo resenje da radi, ali isto tako bih voleo da mi resenje posalje neko ko je uradio zadatak na isti nacin (Double Linked List) ili koristeci STL <list>.

Hvala unapred.
i
iggy91
Vidim niko nema zivaca da pregleda kod (ne osudjujem vas, ni ja ne bih imao da sam na vasem mestu). Hoce li makar neko da mi posalje bilo koji od test primera na PV ili mail? Mozda 5. ili 6. primer...

Stvarno mi nije jasno, na mom racunaru svaki primjer prolazi.
i
iggy91
Niko? :'(
b
boba5551
Ja sam hteo da ti posaljem test primer, ali kada sam video koliki je, odustao sam, a ne mogu da nadjem kod PM da shaljem attach.
i
iggy91
zmaj.org@gmail.com
i
iggy91
Hvala! Uradio sam sa STL list<T>, ako nekoga interesuje. Procitao par clanaka sa TopCoder-a, i bacio se na posao. Rezultat je, naravno, dosao sam po sebi! ;D
t
turgond
Jel moze neko da mi da ucitavanje sa C++ za ovaj zad, daje mi pogresno na sve iako sam rucno testirao za par komada sa tp sa hsina i radi...
A
Amtrix
Nemogu se trenutno u tvom kodu bas snaci.
Ali evo ti tip: pazi dai ucitas novi red i prazan char.
t
turgond
heh xD ma citam, nego znam da je i pre bila caka ako je scanf oce, a ako je gethcar da nece, il obrnuto, nisam siguran :P
v
vasja
Ne razumem prvi test primer...
abcd
3
P x
L
P y
___________

Zar ne bi rezultat trebao biti abcydx ?

Ja ovako razumem

tacka je kursor

1) abcd.
2) abcd.x
3)abc.dx
4)abc.ydx
t
tgudlek
@vasja: nakon sto dodas slovo, cursor bude iza tog dodanog slova.

1) abcd.
2) abcdx.
3) abcd.x
4) abcdyx

Inace, ja sam koristio dva stacka; znakovi lijevo i desno od kursora.
v
vasja
Evo i ja sam uradio sa 2 stacka i sad prolazi na primere iz zadatka i na sve moje primere ali kada posaljem 7 pogresan rezultat i 3 time limit exceded.
Ako moze neko da pogleda... Stvarno me nervira ovaj zadatak:D
t
tgudlek
http://pastebin.com/m59ff2e89

;)
v
vasja
Ok greska u ucitavanju...
Ali jos uvek padam na zadnja 3 primer zbog vremena.
Kako si ti radio sa stackom?
v
vasja
E ovo ne mogu da razumem...
Evo uradio sam i sa stl list i opet ne prolaze poslednja 3 primera na vremenu :(
t
tgudlek
Znam sto je.

strlen() ti nije bas najbrza funkcija :) Ako ju stavis kao uvjet u for petlji, bit ce pozivana nakon svakog povcanja brojaca. ;)
t
tgudlek
Edit:

Popravi to tako da izvan for petlje stavi:

int a = strlen( niza );

i onda u for petlji promjeni uvjet u:

i < a
v
vasja
E ovo nisam znao ... Hvala ti :D proslo je dosta brzo :D

hahahah
Vasja 1: prokleti zadatak 0
hahahahah