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

Обсуждение задачи 1031. Железнодорожные билеты

Why do I get a "WA"?
Послано asdfz 13 окт 2002 14:17
My Program is:
const
     maxn=10000;
var
   l1,l2,l3,f1,f2,f3:longint;
   n,i,k:integer;
   st,ed:longint;
   length,cost:array[1..maxn] of longint;
function Getcost(s:longint):longint;
         begin
         if s<=l1
            then Getcost:=f1;
         if (s>l1) and (s<=l2)
            then Getcost:=f2;
         if (s>l2) and (s<=l3)
            then Getcost:=f3;
         end;
procedure work;
          var
             i,j:integer;
             s,t:longint;
          begin
               for i:=(st+1) to ed do
                   begin
                   while (length[i]-length[k])>l3 do
                         inc(k);
                   s:=2147483647;
                   for j:=k to (i-1) do
                       begin
                       t:=cost[j]+Getcost(length[i]-length[j]);
                       if t<s
                          then s:=t;
                       end;
                   cost[i]:=s;
                   end;
          end;
begin
     readln(l1,l2,l3,f1,f2,f3);
     readln(n);
     readln(st,ed);
     for i:=2 to n do
         readln(length[i]);
     length[1]:=0;
     k:=st;
     cost[st]:=0;
     work;
     writeln(cost[ed]);
end.
I don't know why I get a "Wa".Please help me.
Sorry,I don't know why you got WA,here is my program.
Послано gc007 13 окт 2002 14:50
const
 inp='1031.txt';

var
 c,a:array[1..10000]of integer;
 l1,l2,l3,c1,c2,c3,n,i,x,y,j,p:integer;
 f:text;

begin
 fillchar(a,sizeof(a),120);
 assign(f,inp);
 reset(f);
 readln(f,l1,l2,l3,c1,c2,c3);
 readln(f,n);
 readln(f,x,y);
 if x>y then begin i:=x;x:=y;y:=i;end;
 a[x]:=0;
 for i:=2 to n do readln(f,c[i]);
 close(f);
 for i:=x to y-1 do
  for j:=i+1 to y do
   begin
    if c[j]-c[i]<=l1 then p:=c1;
    if (c[j]-c[i]>l1)and(c[j]-c[i]<=l2) then p:=c2;
    if (c[j]-c[i]>l2)and(c[j]-c[i]<=l3) then p:=c3;
    if (p+a[i]<a[j])and(c[j]-c[i]<=l3) then a[j]:=p+a[i];
   end;
 writeln(a[y]);
end.
I know why do you got WA.
Послано Yang Yi 14 окт 2002 15:37
Insert "if st>ed then begin st:=st+ed;ed:=st-ed;st:=st-ed end;" at
line 39 in your program, then you got AC.
Try this text.
Послано Yang Yi 23 окт 2002 15:26
3 6 8 20 30 40
7
6 2
3
7
8
13
15
23
The answer is 70. Your program print 0.
From 6 to 2 and from 2 to 6 are the same.
Re: Try this text.
Послано asdfz 25 окт 2002 08:19
Thanks a lot
Re: Sorry,I don't know why you got WA,here is my program.
Послано Pasha 5 авг 2004 19:23
Because of changing Pascal compiler Your program now is getting TLE on test #11!