IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> задачка на геометрию, очень сложная по моему
Bard
сообщение 12.01.2008 0:05
Сообщение #1


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


У меня тут одна задачка появилась , никак не могу решить mega_chok.gif .Она тоже с acm.timus.ru. У меня несколько(т.е. 12) тестов проходит nea.gif . Спрашивал у всех учителей математики нашей школы. Каждый говорит одно, но никакой из тех алго не проходит. norespect.gif Самый лучший пока мой собственный cool.gif .

Ну в задаче, если коротко описать, нужно определить можно ли поместить второй треугольник в первый. Длина сторон каждого заданы. Мой алгоритм не очень уж и трудный. Я сначала нахожу сторону с макс. длиной и беру его как за основание(это действие выполняю для обоих). Потом сраниваю основания и вершины(по основанию) и выдаю ответ. Вот и мой код:

var
k,l1,l2,a,b,c,x,y,z:longint;
h1,h2,p1,p2:extended;

function max(x,y,z:longint):longint;
begin
if (x>=y)and(x>=z) then max:=x
else
if (y>=z)and(y>=x) then max:=y
else max:=z;
end;

procedure smen(var a,b,c:longint; l:longint);
begin
if a=l then
begin
k:=c;
c:=a;
a:=k;
end else
if b=l then
begin
k:=c;
c:=b;
b:=k;
end;
end;

begin
readln(x,y,z);
readln(a,b,c);
p2:=(a+b+c)/2;
p1:=(x+y+z)/2;
l1:=max(x,y,z);
l2:=max(a,b,c);
smen(x,y,z,l1);
h1:=(2/z)*sqrt(p1*(p1-x)*(p1-y)*(p1-z));
hx:=(2/x)*sqrt(p1*(p1-x)*(p1-y)*(p1-z));
hy:=(2/y)*sqrt(p1*(p1-x)*(p1-y)*(p1-z));
smen(a,b,c,l2);
h2:=(2/c)*sqrt(p2*(p2-a)*(p2-b)*(p2-c));
ha:=(2/a)*sqrt(p2*(p2-a)*(p2-b)*(p2-c));
hb:=(2/b)*sqrt(p2*(p2-a)*(p2-b)*(p2-c));
if not ((l1>=l2)and(h1>=h2)) then writeln('NO')
else writeln('YES');
end.



Я даже знаю где у меня ошибка но не знаю как ее исправить. Ошибка у меня при том случае если основание и высота первого больше но второй треугольник не входит(у меня выдает что входит).

Недаюь сможете помочь. Заранее спасибо... smile.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Bard
сообщение 11.08.2008 10:05
Сообщение #2


Учиться, учиться еще раз учиться
***

Группа: Пользователи
Сообщений: 158
Пол: Мужской
Реальное имя: Яшар

Репутация: -  3  +


Всем привет... Огромное спасибо всем кто принял активное участие в решении этой задачи. Я наконец-то смог ее решить. Вот и ее решение на паскале.

USES Math;
Var a,b,c:extended;
ca,cb,cc,ha,hb,hc:extended;
a1,b1,c1:extended;
ca1,cb1,cc1,ha1,hb1,hc1:extended;
{.........................................................}
Procedure TRI(a,b,c:extended;Var CA,CB,CC,ha,hb,hc:extended);
Var
S,p:extended;
begin
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
ha:=2*s/a; hb:=2*s/b; hc:=2*s/c;
CC:=arcsin(ha/b); CB:=arcsin(ha/C); CA:=arcsin(hc/b);
if (c*c>a*a+b*b) then CC:=pi-CC else
if (b*b>a*a+c*c) then CB:=pi-CB else
if (a*a>c*c+b*b) then CA:=pi-CA;
end;
{}{}{}{}{}{}{}{}{}{}{}{}
Function Konvert:Boolean;
Var
b2,c2,d:extended;
begin
if (a1>a) OR (ha1>ha) then Konvert:=false
else
if (CC1<=CC) and (CB1<=CB) then Konvert:=true
else
if (CC1>CC) then
begin
b2:=ha1/sin(CC);
d:=sqrt(b2*b2+b1*b1-2*b1*b2*cos(CC1-CC));
if d+a1>a then Konvert:=false
else Konvert:=true;
end
else
if (CB1>CB) then
begin
c2:=ha1/sin(CB);
d:=sqrt(c2*c2+c1*c1-2*c1*c2*cos(CB1-CB));
if d+a1>a then Konvert:=false
else Konvert:=true;

end;

end;
{******************}
Procedure Sdvig(Var a,b,c,CA,CB,CC,ha,hb,hc:extended);
Var
x,y:extended;
begin
y:=b; b:=a; a:=c; c:=y;
x:=hb; hb:=ha; ha:=hc; hc:=x;
x:=cb; cb:=ca; ca:=cc; cc:=x;
end;
{------------------------}
Procedure Perev;
Var x,y:extended;
begin
y:=b1; b1:=c1; c1:=y;
x:=CC1; CC1:=CB1; CB1:=x;
x:=hC1; hC1:=hB1; hB1:=x;
end;
{=====================================}
Var i,j:integer; p:Boolean;
BEGIN
readln(a,b,c); readln(a1,b1,c1); p:=false;

TRI(a,b,c,ca,cb,cc,ha,hb,hc);
TRI(a1,b1,c1,ca1,cb1,cc1,ha1,hb1,hc1);

for
i:=1 to 3 do
begin
for j:=1 to 3 do
begin
if Konvert then begin p:=true; break; end;
Perev;
if Konvert then begin p:=true; break; end;
Perev;
Sdvig(a1,b1,c1,CA1,CB1,CC1,ha1,hb1,hc1);
end;
if p then break;
Sdvig(a,b,c,CA,CB,CC,ha,hb,hc);
end;

if p then writeln('YES') else writeln('NO');
END.


Ну надеюсь алго вы сами поймете good.gif


--------------------
Чтобы поразить цель важна не точность, а смелость
Шарль Луи Монтескё
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Bard   задачка на геометрию   12.01.2008 0:05
Айра   т.е. примерно так выглядят треугольники: Может т...   12.01.2008 1:31
Michael_Rybak   Полное решение этой задачи - очень, очень сложное....   12.01.2008 4:12
Bard   да именно для этой задачи :yes2: И это пробов...   12.01.2008 11:11
Michael_Rybak   Ну ок, давай попробуем. А = тот треугольник, ВНУТ...   12.01.2008 15:35
feniks25   Слушайте, а если обойтись простой логикой? Если ос...   14.01.2008 19:32
Michael_Rybak   Отлично. Теперь придумай контрпример для своего у...   14.01.2008 19:40
feniks25   Отлично. Теперь придумай контрпример для своего у...   14.01.2008 21:04
Michael_Rybak   Нет, это ты назови стороны двух треугольников. Под...   14.01.2008 21:47
feniks25   Нет, это ты назови стороны двух треугольников. По...   14.01.2008 22:12
Michael_Rybak   Я не спешу :) И автору твое сообщение не поможет....   14.01.2008 22:17
feniks25   Ладно, сам уже нашёл. Написал бы цифры было проще.   14.01.2008 22:28
Michael_Rybak   Конечно. А если бы сдал за автора задачу на тимус...   14.01.2008 22:48
Айра   А можно мне пример? :10: Кстати, а треугольники н...   14.01.2008 23:28
Michael_Rybak   И тебе нельзя! :D Ну если правда хочешь, то...   14.01.2008 23:52
Айра   Получается тут можно попробовать как бы зеркально...   15.01.2008 0:34
Michael_Rybak   Угу. На самом деле достаточно написать одну проц...   15.01.2008 0:41
Bard   ну это мы поняли что у меня алго не работает. а ...   15.01.2008 1:03
feniks25   а что если я добавлю в мою программу сравнение уг...   15.01.2008 9:23
Client   Т.е. отсортировать по величинам длин сторон? так ч...   15.01.2008 10:39
feniks25   Т.е. отсортировать по величинам длин сторон? Не...   15.01.2008 11:49
Michael_Rybak   Ну попробуй. По-моему - нельзя. Да. Но варианто...   15.01.2008 11:19
Айра   Про высоту не забываем))   15.01.2008 13:10
Гость   Про высоту не забываем)) Ну а высота то, что на...   15.01.2008 14:42
Айра   Поднимаем левую точку на 1-цу -> высоты становя...   15.01.2008 19:58
feniks25   совмещаем вершины, что напротив оснований, и о, ч...   15.01.2008 22:51
Michael_Rybak   Тогда можно основание черного уменьшить вдвое (под...   15.01.2008 23:57
Bard   Абсолютно согласен. Нам нужно найти такой алгорит...   16.01.2008 19:51
feniks25   А как можно определить на какие точки, в координа...   16.01.2008 20:33
Bard   Всем привет... Огромное спасибо всем кто принял ак...   11.08.2008 10:05


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 21:25
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"