ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1019. Перекрашивание прямой

WA 11
Послано Ilya 30 янв 2015 09:55
I've checked all the tests on the forum, but all of them actually wokred. What's wrong with the code?

type
Otrezok=record
  beginning,ending:real;
  colour:string;
end;

type
Point=record
  mean,predel:real;
end;

var
a:array[0..50000] of Otrezok;
b:array[0..50002] of Point;
i,N,j,s:integer;
k,j1,j2,max,f1,f2:real;
t,f3:string;

function colour(x:real;H:integer):string;
var j:integer;
begin

for j:=0 to H do
begin
if (x>=a[j].beginning) and (x<=a[j].ending) and (a[j].colour=' w') then colour:='w';
if (x>=a[j].beginning) and (x<=a[j].ending) and (a[j].colour=' b') then colour:='b';
end;
end;


begin

a[0].beginning:=0;
a[0].ending:=1000000000;
a[0].colour:=' w';
readln(N);
for i:=1 to N do
begin
readln(f1,f2,f3);
if f1<f2 then
begin
 a[i].beginning:=f1;
 a[i].ending:=f2;
 a[i].colour:=f3;
end;
end;
for j:=1 to N do
begin
b[j].predel:=0;
b[j+N].predel:=0;
b[j].mean:=a[j].beginning;
b[j+N].mean:=a[j].ending;
end;
b[0].predel:=0;
b[0].mean:=0;


  for i:=(2*N-1) downto 1 do
    for j:=1 to i do
    begin
        if b[j].mean>b[j+1].mean then
            begin
              k:=b[j+1].mean;
              b[j+1].mean:=b[j].mean;
              b[j].mean:=k;
            end;
       if (b[j].mean=b[j+1].mean) then b[j+1].mean:=0
       end;



for i:=1 to 2*N do
begin
if (b[i].mean<>0) and (colour(b[i].mean,N)<>colour(b[i].mean+0.1,N)) or (colour(b[i].mean,N)<>colour(b[i].mean-0.1,N)) then b[i].predel:=1;
if b[i].mean=0 then b[i].predel:=0;
end;
t:=colour(0,N);


s:=0;
for i:=0 to 2*N do
begin
if (b[i].predel=1) then
begin
s:=s+1;
k:=b[s].mean;
b[s].mean:=b[i].mean;
b[i].mean:=k;
end;
end;



for i:=s downto 0 do
b[i+1].mean:=b[i].mean;

b[s+2].mean:=1000000000;

max:=0;
b[0].mean:=0;


for i:=1 to s+2 do
begin
if t='w' then
begin
if (i mod 2)=0 then
begin
if (b[i].mean-b[i-1].mean)>max then
begin
max:=b[i].mean-b[i-1].mean;
j1:=b[i-1].mean;
j2:=b[i].mean;
end;
end;
end;
if t='b' then
begin
if (i mod 2)=1 then
begin
if b[i].mean-b[i-1].mean>max then
begin
max:=b[i].mean-b[i-1].mean;
j1:=b[i-1].mean;
j2:=b[i].mean;
end;
end;
end;
end;


write(Round(j1),' ',Round(j2));
end.