задачи олимпиадные(массивы, строки, комбинаторные) |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
задачи олимпиадные(массивы, строки, комбинаторные) |
NightPaladin |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
Посомтрите задания плз
Очень нуждаюсь в помощи Сообщение отредактировано: NightPaladin - Прикрепленные файлы NSU_2005_spring.doc ( 97.5 килобайт ) Кол-во скачиваний: 650 -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
NightPaladin |
Сообщение
#2
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
В первой что - то вроди этого получилось
Код 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 Сообщение отредактировано: NightPaladin - -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
Altair |
Сообщение
#3
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
3 задачу решай сначала простая
выдели последовательности одинаковых символов. (уже приводжил пример здесь ) Ну а потом подлинне символов и по цифре определи символо введенный. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Altair |
Сообщение
#4
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
А вот задача 5 интересная.
Ядумаю можно 2 списка завести. в один кидать каталоги ЕСЛИ ТАМ еще нет такого (азаписываемв начало списка-времение меньше). а в другой файлы если там такого еще нет. Итого для добавления придется просмотреть список (максимум-весь) и добавить в начало потом если надо. По времени это равнозначно будет добавлению в конец списка. (почти ) добавил позже: А что если вместо спискаиспользовать AVL дерево? я вот подумал - проверка есть ли уже элементбудет ну очень быстрой.... Сообщение отредактировано: Oleg_Z - -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NightPaladin |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
С третьей щас пытаюсь допереть. Вот я вывел все последовательности сравнил их и получил буквы, а как слова составить- ведь будут отдельно послед. отдельно одиночные буквы
А как первую уложить в 1 секунду Сообщение отредактировано: NightPaladin - -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
Altair |
Сообщение
#6
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Вот я вывел все последовательности сравнил их и получил буквы ну и все . Все буквызаписатьдруг задругом и все. вот тебе все сообщение.А что значит 1 уложитиь в 1секунду? вот мне этовсегда не понятно .... ведь это прямо зависит от железа и от компилятора -какойбдетсгенерирован код. 1 что работаетбольше секунды? Сообщение отредактировано: Oleg_Z - -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
NightPaladin |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
Они выложили результат теста - timeout - не уложились батенька...
-------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
NightPaladin |
Сообщение
#8
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
Цитата(Oleg_Z @ 15.05.05 8:55) А ну да... собсвенно зачем делать перебор по дням что бы найти 255 день? достаточно посчитать сначала до нужного месяца, для этого все числа известны,надо только проверить високосныйли годи все! Я немного не понял - как бы это - более математически как это вычисляется? -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
NightPaladin |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
по третьей пока только такие наброски
Код 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. Сообщение отредактировано: volvo - -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
NightPaladin |
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
Цитата(NightPaladin @ 15.05.05 8:56) Я немного не понял - как бы это - более математически как это вычисляется? Извеняюсь понял :D -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
NightPaladin |
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 67 Пол: Мужской Репутация: 0 |
Выложил вот это решение первой задачи - тоже во время не укладывается.
Код 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. -------------------- На горе лежит дискета
У неё испорчен boot Через дырочку в конверте Её вирусы грызут |
Текстовая версия | 12.01.2025 12:38 |