rLjudi izvinite ako sam vam dosadan ali nemam drugog nacina da ispravim greske u zadatku.
Padam na par primera a nemam pojma sto .
Evo koda :
http://rapidshare.de/files/8891468/trougao.pas.html
bOvo nisam testirao, ali mislim da je greska.
U proceduri intro, ako su svi r-ovi=0, onda ti je abc prava, pa bez obzira da li M lezi levo, desno ili na nekoj od pravih, tebi ne treba to resenje!
U for petljama.
Da li kod tebe trougao mogu da obrazuju tacke (N-1,N-2,N-3)??? U prvoj for petlji nemas ni jednu od te tri tacke.
Mislim da ti je bespotrebno
for j:=i+1 to N-1 do, bolje je mozda
for j:=i+1 to N-2 do
Nije greska, ali samo zbog preglednosti.
Jos jedna stvar, mozda bi bilo dobro da proveravas u proceduri Main
if (l<>i) and (l<>j) and (l<>k) then
p:=...
Nisam testirao ovo, ali samo predlozi zbog cega mozda ne radi. Posto u funkciji w mnozis dva integera ciji proizvod moze da predje integer, bolje ti je da koristis longint svuda, a da izbacis int64, jer inace meni se int64 puno puta zapucavao na USACO-u i Z-Treningu. Desavalo se da umesto int64 stavim double i ispis na 0 decimala i sve prodje, dok mi je sa int64 pucalo dosta test primera, samo mali savet, a ti odluci!
Nadam se da sam pomogao :)
rBilo tacno ili netacno ovo sto si napisao zaista sam ti zahvalan na pomoci.Provericu sve ovo pa sta bude...
rI samo da to kazem , napisao si da ako su r-ovi =0 onda mi ne treba resenje ali kad tad ce se desiti da ta 4. tacka bude teme tog trougla-prave i onda ce broj tacaka biti isti kao u onom bivsem trouglu kada nije pripadala.To je prakticno maksimalan broj tacaka na toj pravoj i sve te tacke pripadaju trouglu za 2 krajnje tacake i jednom u sredini.
Toliko . Poz.
rMolio bih admina da mi posalje neki od primera : 2,3 ili 9 za ovaj zadatak.
dJa mislim da je dobro da napises koju ideju si koristio za resavanje na ovom zadatku.
Evo kako sam ja pravio proverivanje dali jedna tacka je unutar trougao:
Za sekoja strana na triagolnikot ako ta tacka se nalazi od ista strana (levo ili desno), ili ako ona lezi na jedna strana a na drugi dve se nalazi od
ista strana, onda je ta tacka unutar trougao, inace nije.
dOvako, ako imas trougao ABC, i proverujes za tacka
P, treba redosled da bude ovako:
Proverujes za strana AB, pa BC, pa CA, t.e
ako P se nalazi samo desno ili samo
levo od AB, BC, CA, onda je unutar trougao,
ili ako tocka leze na prava koja mine niz dve tacke, recimo
niz A i B, onda ako je od ista strana i na BC i CA onda je
unutar trougao.
Evo f-ja za proveruvanje na koja strana je tocka P od prava
koja mine niz dve tacke A i B:
function strana (a, b, p: point): integer;
var t: int64;
begin
t:= ((p.x-a.x)*(b.y-a.y)) - ((p.y-a.y)*(b.x-a.x));
if t > 0 then
strana:= 1
else if t < 0 then
strana:= -1
else
strana:= 0;
end;
Nadam se da sam dobro objasnio.
rSve sam ja to uradio . Pa sam posle toga ispisao funkciju koja proverava da li se tacka nalazi u trouglu (mozda ona nije u redu,mada sam je dosta testirao) :
funkcija 'w' proverava sa koje strane se prave se nalazi tacka(ovo sto si ti napisao)
function intro(A,B,C,M:RPoint):Boolean;
var p1,p2,p3:Boolean;
r1,r2,r3: integer;
res : Boolean;
begin
r1 := w(A,B,C)*w(A,B,M) ;
r2 := w(A,C,B)*w(A,C,M) ;
r3 := w(B,C,A)*w(B,C,M) ;
p1 := r1>=0;
p2 := r2>=0;
p3 := r3>=0;
res := p1 and p2 and p3;
if(r1=0)and(r2=0)and(r3=0)then
if(w(A,B,M)<>0)then
res := False;
intro := res;
end;
mhmm, ja mislim da je najbolje da provjeravate ovako ako je tocka u trokutu, tako da ako su vrhovi trokuta A, B i C, nadete neku tocku koja je 100% u trokutu ( najbolje težište, T ) i onda provjeravate da li je (povrsina ABT)+(povrsina BCT)+(povrsina BAT)=(povrsina ABC) onda je 100% tocka u trokutu...
nadam se da sam pomogao
ljesi li siguran da ide taj uslov
ta treca povrsina bi trebala ja mislim od trougla ACT, a ne od BAT