← Back to topics
Topic

trougao

v
vasja
Kojom formulom ste radili ovaj zadatak .
Meni pada na 4 primera



double area(int x1,int y1,int x2,int y2,int x3,int y3)
{

return (0.5*(((x2*y1)-(x1*y2))+((x3*y2)-(x2*y3))+((x1*y3)-(x3*y1))));


}
r
renovator
neke moguce greske :
1./ koristi apsolutnu vrednost izraza koji si naveo za povrsinu.
2./ ne poredi double-ove sa operatorom == vec abs(v1-v2)<1e-9 recimo..
v
vasja
Ako na ovaj isti izraz stavim abs() daje kompajlersku gresku???
Ne razumem bas ono poredjenje . Zasto < ?
r
renovator
ovde imas fino objasnjenje double-ova :
http://www.topcoder.com/tc?module=Static&amp;d1=tutorials&amp;d2=integersReals
l
losvald
Nije mi jasno zasto ovo brute force rjesenje ne radi. Javlja na sedmom test primjeru krivo rjesenje.
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
int n;
struct point {
long long x, y;
};
vector<point> v;
inline bool ccw(const point&amp; a, const point&amp; b, const point&amp; c) {
return a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y) >= 0;
}
int main() {
int sol = 0;
scanf("%d", &amp;n);
v.resize(n);
for(int i = 0; i < n; ++i) scanf("%lld%lld", &amp;v[i].x, &amp;v[i].y);
for(int a = 0; a < n-2; ++a)
for(int b = a+1; b < n-1; ++b)
for(int c = b+1; c < n; ++c) {
int curr = 0;
for(int i = 0; i < n; ++i)
if(i != a &amp;&amp; i != b &amp;&amp; i != c) {
bool s1 = ccw(v[a], v[b], v[i]);
bool s2 = ccw(v[b], v[c], v[i]);
bool s3 = ccw(v[c], v[a], v[i]);
if(s1 == s2 &amp;&amp; s2 == s3) ++curr;
}
sol >?= curr;
}
printf("%d", sol+3);
return 0;
}
r
renovator
a sta ako je n < 3 ? :)
l
losvald
Skuzio sam da ne radi u slucaju kada je tocka na stranici, pa moram malo modificirat ccw.
t
todosijevic
ovo resenje pada na 2,3,6,9 primer?
double povrsina(int a,int b,int c,int x[],int y[])
{
double p;
p=0.5*abs(x[a]*(y[b]-y[c])+x[b]*(y[c]-y[a])+x[c]*(y[a]-y[b]));
return p;
}
int main()
{
int n,br,res;
cin>>n;
int x[n+1];
int y[n+1];
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
if(n<=3)res=n;
else
{ res=0;
for(int i=1;i<=n-2;i++)
for(int j=i+1;j<=n-1;j++)
for(int k=j+1;k<=n;k++)
{
br=3;
for(int l=1;l<=n;l++)
{
if(l!=i&amp;&amp;l!=j&amp;&amp;l!=k)
if(fabs(povrsina(i,j,l,x,y)+povrsina(i,k,l,x,y)+povrsina(j,k,l,x,y)-povrsina(i,j,k,x,y))<1e-9)
br++;
if(res<br)res=br;
}

}
}
cout<<res;
}

Ako su 4 tacka kolinearne da li se onda racuna da i one pripadaju jednom trouglu?
Moze li neki od navedenih test primera

r
renovator
shaljem jedan test na private...
t
todosijevic
Prepravio sam proveravanje kad se tacka nalazi na stranici trougla ali sada padam na 6. i 9. testu
n
nemanja90
Jel mogu molim vas da dobijem test 2 i 9, vec 19 puta sam pokusao i nista.
n
nemanja90
Sad prolazi dvojku ali pada 3,6,9, jel mogu molim vas da dobijem recimo sesticu, poludecu vise, 20 puta saljem zadatak i to 10 razlicitih ideja i uvek padam na nekim primerima.
s
sanja
za pocetak... reci nam ideju :)
n
nemanja90
for i:=1 to n-2 do
for j:=i+1 to n-1 do
for k:=j+1 to n do
ako nisu kolinearne, onda ze svako l:=1 to n proveriti da li se nalazi izmedju prave koja sadrzi temena "i" i "j" i prave paralelne njoj koja sadrzi teme "k", pa tako i za pravu koja sadrzi "i" i "k" i pravu paralelnu njoj koja sadrzi "j" i pravu koja sadrzi "j" i "k" i pravu paralelnu njoj koja sadrzi "i". ako je izmedju 2 prave u sva tri slucaja onda je u trouglu.
s
sanja
uhhh ja sam trouglove davno kucala i sada uopste ne razumem svoje resenje :) Mada mi se cini da je dovoljno da proveris da li je zbir povrsina troglova koje odredjuju tacke i, j, l; i, k, l; j, k, l jednak povrsini i, j, k :)
n
nemanja90
Radio sam tvoju ideju i na testu 7 mi kaze izlazni kod nije 0.
Evo pogledaj kod ako ti nije tesko pa vidi zasto, ja sam gledao, ali ne mogu nista da nadjem jer sam jako umoran, bio sam na takmicenju iz mate ovaj vikend.
Inace, sklonicu kod za koji dan da ne stoji na sajtu, samo kad ga pogledas.

Edit:izbacen kod.
s
sanja
Iskreno receno, ja ne vidim gde moze da bude problem...
b
boba5551
Ja znam ;)

p:=sqrt(abs(q*(q-s1)*(q-s2)*(q-s3)));
n
nemanja90
Hvala, nije mi samo jasno zasto je to bilo potrebno.

Jedno pitanje, nevezano za temu:
-Ja sam pogledao pre par dana onaj link gde pise testirajte novi z-trening i nije mi jasno cemu sluzi? Malo je lepse odradjen, ali su zadaci isti, kao i ljudi koji su ih slali.
s
sanja
to je bio neki Z-ov test, trebalo je da se upgrade-uje Z-trening, ali... nista od toga nije ispalo :(