Помощь - Поиск - Пользователи - Календарь
Полная версия: задачи олимпиадные(массивы, строки, комбинаторные)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
NightPaladin
Посомтрите задания плз

Очень нуждаюсь в помощи
NightPaladin
В первой что - то вроди этого получилось
Код
program asd;
Uses
    CRT;
var
    year: Integer;
    mas: array[1..12] of Byte;
    day: Integer;
    mon : Byte;
    week : Byte;
    a: Byte;
(*______________________*)
    fil : Text;
    out : Text;
begin
    ClrScr;
             Assign(fil, '/input.txt');
             Reset (fil);

             Assign(out, '/output.txt');
             ReWrite(out);


           Read(fil,year);

             mas[1]:=30; mas[2]:=28; mas[3]:=31; mas[4]:=30;
             mas[5]:= 31; mas[6]:= 30; mas[7]:=31; mas[8]:=31;
             mas[9]:=30; mas[10]:=31; mas[11]:= 30; mas[12]:=31;
             If (year mod 400 =0) then
                Else If(year mod 4 = 0) AND (year mod 100 > 0) then
                     mas[2]:=29;

             repeat
                   a:= a+1;
                   day:= day + mas[a];

             until day >    255;

             day:= day - mas[a];
             day:= 255 - day;
             mon:= a;
             week:= Round(day/ 7);
                           Write(out, week,' ',day,'.',mon,'.',year);
             close(fil);
             Close(out);
    ReadKey;
end.


Мне только что сообщили, что задача работате, но выходит за отведённое время. Что Делать :o
Altair
3 задачу решай сначала smile.gif простая smile.gif
выдели последовательности одинаковых символов.
(уже приводжил пример здесь )
Ну а потом подлинне символов и по цифре определи символо введенный.
Altair
А вот задача 5 интересная.
Ядумаю можно 2 списка завести.
в один кидать каталоги ЕСЛИ ТАМ еще нет такого (азаписываемв начало списка-времение меньше).
а в другой файлы если там такого еще нет.
Итого для добавления придется просмотреть список (максимум-весь) и добавить в начало потом если надо.
По времени это равнозначно будет добавлению в конец списка. (почти smile.gif )

добавил позже:
А что если вместо спискаиспользовать AVL дерево? я вот подумал - проверка есть ли уже элементбудет ну очень быстрой....
NightPaladin
С третьей щас пытаюсь допереть. Вот я вывел все последовательности сравнил их и получил буквы, а как слова составить- ведь будут отдельно послед. отдельно одиночные буквы

А как первую уложить в 1 секунду
Altair
Цитата
Вот я вывел все последовательности сравнил их и получил буквы
ну и все . Все буквызаписатьдруг задругом и все. вот тебе все сообщение.


А что значит 1 уложитиь в 1секунду? вот мне этовсегда не понятно .... ведь это прямо зависит от железа и от компилятора -какойбдетсгенерирован код.
1 что работаетбольше секунды?
NightPaladin
Они выложили результат теста - timeout - не уложились батенька...
NightPaladin
Цитата(Oleg_Z @ 15.05.05 8:55)
А ну да... собсвенно зачем делать перебор по дням что бы найти 255 день?
достаточно посчитать сначала до нужного месяца, для этого все числа известны,надо только проверить високосныйли годи все!


Я немного не понял - как бы это - более математически как это вычисляется?
NightPaladin
по третьей пока только такие наброски
Код
program asd;
Uses crt;
var
   s:string;
   mas: array[a..z] of Byte;
procedure getposl(s:string);
var
  i   :  byte;
  ss  :  string;
  b   :  boolean;
begin

 ss:=''; b:=false;
 for i:=1 to length(s) do
     begin
          if b then begin ss:=ss+s[i] end; {next}
          if (s[i]=s[i+1]) and (b=false) then begin ss:=ss+s[i]; b:=true; end; {new}
          if ((NOT((s[i]=s[i+1])))or (i=length(s))) and (b=true) then begin
          if ss<>'' then {*****}writeln(ss);{*****} ss:='';b:=false end;
     end
end;

begin
readln(s);

      mas[a]:=2; mas[b]:= 22; mas[c]:= 222; mas[d]:=3; mas[e]:=33; mas[f]:=333;
      mas[g]:=4; mas[h]:= 44; mas[i]:=444; mas[j]:=5; mas[k]:=55; mas[l]:=555;
      mas[m]:=6; mas[n]:=66; mas[o]:=666; mas[p]:= 7; mas[r]:= 77; mas[s]:=777;
      mas[t]:=8; mas[u]:=88; mas[v]:=888; mas[w]:=9; mas[x]:=99; mas[y]:=999;
getposl(s)
end.
NightPaladin
Цитата(NightPaladin @ 15.05.05 8:56)
Я немного не понял - как бы это - более математически как это вычисляется?

Извеняюсь понял :D
NightPaladin
Выложил вот это решение первой задачи - тоже во время не укладывается. lol.gif

Код

program asd;
Uses
    CRT;
var
    num, count, i    :  Integer;
    st   :  String;
    by,num2, count2  :  Byte;
    ch,ch2 :  Integer;
(*______________________________ *)
    vrem   : Integer;
begin
    ClrScr;
            WriteLn('Input number:');
            ReadLn(num);

            For  count:= 12 to num-1 do
                 begin
                       Str(count,st);
                       by:= Length(st);
                       For count2:= 1 to by do
                           begin
                                Delete(st, count2, 1);
                                Val(st, num2,i);
                                vrem:=num2 + count;

                                If vrem = num then
                                   WriteLn(num2,'+',count);
                           end;
                 end;
    ReadKey;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.