[Logo] Форум DL
  [DL]  Back to home page 
Forum Index ->Олимпиадное программирование ->Обсуждение теории 1, 2
Author Message
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Россия-И. Командные\10_Rup3 - "design"


Вадим Грибанов:

... правда решение на freepascal почему-то не набирает полный балл
...
Вероятно на freepascal не проходит из-за старой версии, на delphi проходит.
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Runtime Error 106:Invalid numeric format

Во Free Pascale это означает не хватает чисел в строке ввода.
BP в таких случаях присваивает нули тем переменным, для которых нет чисел на вводе.
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Обсуждение на Codeforces: Компиляторы Delphi и Free Pascal
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Функция Val

При переводе строки в число, хвостовые пробелы интерпретируются по разному.

Turbo Pascal и Free Pascal считают их ошибочными и НЕ ПЕРЕВОДЯТ строку в число, а выдают номер первого хвостого пробела как номер ошибочного символа.

Delphi считает хвостовые пробелы незначащими символами и всё-таки переводит строку в число.

Пример
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Программы ПО-РАЗНОМУ реагируют на отсутствие чисел в строке.
Turbo Pascal считает все "недочитанные" числа равными нулю.
А Free Pascal выдаёт сообщение об ошибке - что ему не хватает чисел в строке.

Подробнее
Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
Белорусские олимпиады (BY/GO)\Дипломный минимум\Придумать реализацию\10_GO - "Пробное задание" 96129
http://dl.gsu.by/task.jsp?nid=1122358&cid=620

+1 Долинский Михаил (100 / 100)
2014-08-27 12:44:44 100 / 100 Все тесты успешно пройдены 1.DPR DelTA3 at NIT5
2014-08-27 12:40:34 35 / 100 не пройден 8 тест (неверный ответ) 1.PPW DelTA3 at NIT5

Одно и то же решение в Delphi, проходит, в FP - нет

{$R-}
{
 Read list S1 and list S2
 Split both to 3d-array
 Initialize [a1,b1] [a2,b2]

 while not eolists
   if Connected [a1,b1] & [a2,b2]
     then merge->3
     else less ->3

 If eolist1 then AddList2
 If eolist2 then AddList1

 Print string from 3d-array[3]
}

Const
  MaxN=50000;
var

  a                 : array [1..3, 1..MaxN,1..2] of longint;
  s1,s2             : string;
  n1,n2,i, i1,i2,i3,
  j1,j2,
  a1,b1,a2,b2,a3,b3 : longint;
  _                 : integer;
  One               : boolean;

  procedure Split(S:string; k:longint; var n:longint);
    var
      c1,c2   : string;
      d,pz,pt : longint;
    begin
      delete(s,1,1);
      d:=length(s);
      s[d]:=',';
      n:=0;
      while (s<>'') and (d<>1) do
        begin
          inc(n);
          pz:=pos(',',s);
          c2:=copy(s,1,pz-1);
          pt:=pos('.',c2);
          if pt=0
            then begin
                   val(c2,a[k,n,2],_);
                   a[k,n,1]:=a[k,n,2];
                 end
            else begin
                   c1:=copy(c2,1,pt-1);
                   delete(c2,1,pt+1);
                   val(c1,a[k,n,1],_);
                   val(c2,a[k,n,2],_);
                 end;
          delete(s,1,pz+1);
        end;
    end;

  procedure PrintA(k,n:longint);
    var
      i : longint;
    begin
      for i:=1 to n do writeln(a[k,i,1],' ',a[k,i,2]);
    end;

  procedure PrintSA(k,n:longint);
    var
      i : longint;
    begin
      write('[');
      for i:=1 to n do
        begin
          if a[k,i,1]=a[k,i,2]
            then write(a[k,i,1])
            else write(a[k,i,1],'..',a[k,i,2]);
          if i=n
            then writeln(']')
            else write(', ');
        end;
      if n=0 then writeln(']');
    end;

  procedure Merge(a1,b1,a2,b2:longint; var a3,b3:longint);
    begin
      if a1<a2 then a3:=a1 else a3:=a2;
      if b1>b2 then b3:=b1 else b3:=b2;
    end;

  function Connected(a1,b1,a2,b2 : longint) : boolean;
    begin
      Connected:= ((a2>=a1-1) and (a2<=b1+1)) or
                  ((b2>=a1-1) and (b2<=b1+1)) or
                  ((a1>=a2-1) and (a1<=b2+1)) or
                  ((b1>=a2-1) and (b1<=b2+1));
    end;

begin
  assign(input,'input.txt'); reset(input);
  assign(output,'output.txt'); rewrite(output);
  readln(s1);
  readln(s2);

  if s1='[]' then writeln(s2) else
  if s2='[]' then writeln(s1) else begin

  Split(s1,1,n1);
  Split(s2,2,n2);

  i1:=1; i2:=1; i3:=0;
  if a[1,1,1]<a[2,1,1]
    then begin a1:=a[1,1,1]; b1:=a[1,1,2]; i1:=2 end
    else begin a1:=a[2,1,1]; b1:=a[2,1,2]; i2:=2 end;

  while (i1<=n1) or (i2<=n2) do
    begin
      if (i1<=n1) and ( (a[1,i1,1]<=a[2,i2,1]) or (i2>n2))
        then begin a2:=a[1,i1,1]; b2:=a[1,i1,2]; inc(i1) end else
      if (i2<=n2) and ( (a[2,i2,1]<a[1,i1,1]) or (i1>n1))
        then begin a2:=a[2,i2,1]; b2:=a[2,i2,2]; inc(i2) end;

      if Connected(a1,b1,a2,b2)
        then begin
               Merge(a1,b1,a2,b2,a3,b3);
               a1:=a3; b1:=b3;
             end
        else begin
               inc(i3);
               a[3,i3,1]:=a1; a[3,i3,2]:=b1;
               a1:=a2; b1:=b2;
             end;
    end;

  inc(i3);
  a[3,i3,1]:=a1; a[3,i3,2]:=b1;

  PrintSA(3,i3);   end; {else}
  close(input); close(output);
end. 

Mihail Dolinskiy

Topics: 1556
Messages: 36794

My Profile
03.06.2015 10:23:09 03.06.2015 10:23:15 Позняк Алина Базовое программирование 15_оАпр. Задача 18 5 Все тесты успешно пройдены ALINA.PAS DelTA3 at Nit4
03.06.2015 10:15:07 03.06.2015 10:15:11 Позняк Алина Базовое программирование 15_оАпр. Задача 18 0 ошибка компиляции alina.PPW DelTA3 at NIT7

var
  s,t : string;
  i   : longint;
  x   : char;
begin
  readln(s);
  readln(x);
  t:='';
  for i:=1 to length(s) do
    if pos(s[i],x)=0 then t:=t+s[i];
  writeln(t);
end.


Одно и тоже решение в TP проходит, в FP - нет.
Genadiy Lvovich

Topics: 0
Messages: 1

My Profile
эм... не имеет смысла обсуждать различия языков который уже давно устарели ИМХО
 
Forum Index ->Олимпиадное программирование ->Обсуждение теории 1, 2
Time:0,125