Письма читателей 25

  Письма в данный раздел отбираются по усмотрению автора рассылки, интересные для большого круга подписчиков. Хочу предупредить, что корреспонденция, оскорбляющая чьё-либо достоинство или содержащая нецензурные выражения публикации не подлежит.

From: Z.M. <zhilinmike@hotmail.com>
To: sapisoft@yandex.ru
Date: Tuesday, March 19, 2002, 9:56:46 PM
Subject:

Здравствуйте.

Я очень хорошо изучаю вашу рассылку. Она просто класс!!! Но порой данные решения такие тупые. Вот последняя задача - последовательность. Решение перебором на мой взгляд очень сложное и неоправданное. Просто динамика решает её очень хорошо.
Вот что я сотворил за полчаса после прочтения письма. Как говорится проще надо-проще!!!!!

Mike.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
uses crt,dos;

var dat,max,sol:array[1..200]of longint;
  n:integer;

procedure inputdata; {input data}
var i:integer;
begin
  clrscr;
  assign(input,'input.txt');
  reset(input);
  readln(n);
  for i:=1 to n do readln(dat[i]);
  close(input);
end;

procedure find;
var i,j,m:integer;
begin
  max[1]:=1;
  for i:=2 to n do begin
    m:=0;
    for j:=1 to i-1 do if (dat[i]>=dat[j])and(max[j]>m)then m:=max[j];
    max[i]:=m+1;
  end;
end;

procedure outresult;
var i,m,mm:integer;
begin
  m:=0;
  for i:=1 to n do if max[i]>m then m:=max[i];
  assign(output,'output.txt');
  rewrite(output);
  writeln(m);
  mm:=m;
  for i:=n downto 1 do if max[i]=m then begin sol[m]:= dat[i];dec(m) end;
  for i:=1 to mm do writeln(sol[i]);
  close(output);
end;

begin
  inputdata;
  find;
  outresult;
end.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Алексей Шамис: Да, это конечно все хорошо, но почему ваше решение не проходит по тесту, данному в условии?;)

From: Igor L.Zubrytsky <igorz@butes.west.energy.gov.ua>
To: sapisoft@yandex.ru
Date: Monday, March 18, 2002, 8:55:30 AM
Subject: Ошибка в теории (немного математики от 18.3.2002)

Если две прямые перпендикулярны, то K1*K2= -1 , а не 1.


Пример: y=x, y=-x. k1*k2=1*(-1)=-1 .

Алексей Шамис: В предыдущем номере действительно была допущенна ошибка (или, если позволите, опечатка) в разделе "теория". Но странно, что отреагировал на это только один человек...8)

From: Serhiy Serbin <serhiys@adarvo.com>
To: sapisoft@yandex.ru
Date: Tuesday, March 19, 2002, 9:40:55 AM
Subject: задача

Коль пошел разговор об уравнении прямой, то вспомнил очень простую задачу из какойто то там олимпиады. Задача действительно очень простая, правда не совсем понятно почему, но решили ее тогда далеко не все.

Задана последовательность точек на плоскости, парами координат (x,y). Колличество точек N >= 3. Начинаем последовательно просматривать тройки точек от 1 до N-2. Будем считать, что был осушевствлен левый поворот, если луч исходящий из точки (i+1) в точку (i+2) был повернут против часовой стрелки по отношению, к лучу из i в (i+1). И соотвественно правым поворотом, если по часовой стрелке. Задание: сколько левых повортов в последовательности?

К сожалению или к радости, именно подобная формулировка была в задании, что сразу несет кучу вопросов. Ну для начала, можно уверенно всегда выдавать ответ ноль и это всегда будет правильным решением, но что бы привесте задачу к тому
виду, который по видимому подразумевали авторы, я от себя добавлю два уточнения.

Если луч (i+1 -> i+2) продолжает луч (i - > i+1) (поворот на ноль градусов) - будем считать ни левым ни правым. И самое главное, всегда во внимание будем принимать меньшый угол, который образуется между лучами.

Best regards,
Serhiy Serbin

From: Yuri Y. Roumega <ryy@mail.ru>
To: "Aleksey Shamis" <sapisoft@yandex.ru>
Date: Wednesday, March 20, 2002, 1:28:29 AM
Subject: По материалам выпуска #24 рассылки "Олимпиадные задачи с решениями на TP"

Здравствуйте, Aleksey,

Я часто и с интересом читаю Вашу рассылку, но обидно, что наравне с интересной информацией в ней иногда бывают весьма сомнительные, а то и неправильные утверждения.

В выпуске #24 Алексей Ильичёв пишет, что при обмене значений 2 переменных c помощью XOR алгоритм будет работать некорректно, если A=B. Это не так. В самом деле, рассмотрим значения переменных на каждом шаге:


A:=X; B:=X; {Присвоили первичное значение: A=X; B=X, т.е. A=B}
A:=A xor B; {A=X xor X=0; B=X}
B:=A xor B; {A=0; B=0 xor B=0 xor X=X}
A:=A xor B; {A=0 xor B=0 xor X=X; B=X}


Действительно, после 1-го шага A обнулится, но это не означает, что в итоге (после 3-го шага) A будет равно 0 - вопреки словам Алексея.

Второе замечание касается ур-ния прямой в 2D.


Было сказано, что любая прямая на плоскости задается уравнением Y=K*X+B . На самом деле не все прямые можно задать таким ур-нием. Рассмотрите прямую, параллельную оси ординат. Тогда у всех точек X=const, а Y меняется от -oo до +oo. Естественно, нельзя подобрать K и B такие, чтобы ур-ние Y=K*X+B описывало линию.

Для задания произвольной прямой на плоскости следует использовать ур-ние A*X+B*Y+C=0. К примеру, для прямой, проходящей
через точки (x1,y1) и (x2,y2)
A, B и С будут вычисляться так:

A:=y1-y2;
B:=x2-x1; {это не ошибка!}
C:=(x1*y2)-(x2*y1);

Тогда, если есть 2 прямые A1*X+B1*Y+C1=0 и A2*X+B2*Y+C2=0, то условие параллельности: A1*B2=A2*B1 условие перпендикулярности: A1*A2=-B1*B2.

C уважением,
Yuri.

From: Hilary <lars@ezmail.ru>
To: sapisoft@yandex.ru
Date: Monday, March 18, 2002, 5:11:49 PM
Subject:
Проблемка...

Добрый день!

Возникла небольшая проблема (хотя, может это только для меня?)


Задача: вычислить на Паскале число е с точностью до 8-9 знака.

Но: дело в том что при "чистом" использовании второго замечательного предела(это который (1+1/n)^n)) или формулы разложения в ряд Тейлора точность достигается в 7 знаке, а дальше начинается чертовщина, в виде появления цифры 3 вместо 2. Была бы благодарна, если бы хоть кто-нибудь пояснил мне причину сих происков судьбы, а так же не отказалась бы от идей по поводу достижения цели (8-9 знаков после запятой...)

Hilary.
mailto:lars@ezmail.ru