Автобусные билеты в рулоне пронумерованы от 000001 до 999999. Составить программу, выводящую на экран количество и номера (в несколько столбиков) всех счастливых билетов в некотором диапазоне, организовав запрос начального и конечного номера билета диапазона. Примечание: Счастливым считать тот билет, у которого сумма первых трех цифр равна сумме трех последних.
На судоверфь для докового ремонта пришли пять судов А, В, С, D, Е. В доке судоверфи может находиться только одно судно. Необходимое время стоянки в доке каждого судна различно и составляет соответственно МА, МВ, МС, MD и МЕ. Составить программу, определяющую и выводящую на экран очередность постановки судов в док, при которой суммарные потери от простоя судов минимальны.
Маленький заблудившийся медвежонок движется по дороге, вдоль которой на расстоянии М друг от друга растут деревья. Останавливаясь под каждым деревом, медвежонок забывает, откуда пришел, и, отправляясь через некоторое время в дальнейший путь, совершенно случайно выбирает то или иное направление движения. На каком расстоянии от первого дерева может быть медвежонок после шести этапов?
В городе N домов. Найдите максимально возможное количество непересекающихся заборов, которое можно построить в этом городе, при условии, что каждый забор огораживает хотя бы один дом, а никакие два забора не огораживают одну и ту же совокупность домов.
В клетках таблицы расставлены числа. Расставить в этих клетках K ферзей так, чтобы они друг друга не били и чтобы сумма чисел, ими закрываемых, была максимальной.
В заданной последовательности целых чисел найти максимально длинную подпоследовательность чисел такую, что каждый последующий элемент подпоследовательности делился нацело на предыдущий.
По кругу расположено N монет гербами вверх и M монет гербами вниз. Обходя круг по ходу часовой стрелки, переворачивает каждую S-тую монету. В первый раз счет начинается с герба. В каком порядке надо расставить монеты, чтобы после K ходов стало L монет, лежащих гербами вверх.
При поступлении в вуз абитуриенты, получившие двойку на первом экзамене, ко второму не допускаются. В массиве A[n] записаны оценки, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в один из списков L1 и L2, но в то же время не входят в другой.
AlaRic
17.03.2003 21:00
Последовательность целых чисел строится следующим образом: - первое задается (обозначим его через a), - каждое следующее число является суммой цифр квадрата предыдущего. Например, если a=4, то получится последовательность 4, 7, 13, 16, ... По заданным a и n определить n-е число в этой последовательности. Известно, что a<10000 и n<1000000.
Slam
19.03.2003 23:11
Телефонный номер называется «шахматным», если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных «шахматных» номеров, начинающихся с заданной цифры.
1 2 3 4 5 6 7 8 9 0
Ivs
26.03.2003 21:13
"Театр"
В театре N мест, пронумерованных целыми числами от 1 до N. Некоторые из зрителей опоздали на спектакль, поэтому после третьего звонка те зрители, которые имели билеты на неудобные места, пересели на более удобные. Опоздавшие зрители, которые пришли уже после третьего звонка, садились на первое попавшееся свободное место.
В антракте один из опоздавших зрителей решил сесть на свое место. Если его место до этого было занято, то тот, кто там сидел, пересаживался на свое место. Если и там кто-то уже сидел, то и этот зритель также вынужден был вернуться на свое место. И так далее.
Поскольку в театр попали только зрители, имевшие на руках билеты, то начавшийся в антракте процесс пересаживания зрителей обязательно заканчивался. Необходимо подсчитать, сколько человек в результате такого пересаживания были вынуждены поменять свои места.
Требуется создать программу для вычисления количества зрителей, поменявших свои места из-за опоздания одного зрителя.
Технические требования:
Входной файл: INPUT.TXT Выходной файл: OUTPUT.TXT
Формат входных данных:
Входной файл INPUT.TXT состоит из трех строк. В первой строке содержится целое число N (N<=30000) — количество мест в зале.
Вторая строка содержит последовательность из N целых чисел, разделенных пробелами, где первое число определяет номер места в билете у зрителя, который занял место с номером 1, второе - номер места в билете у зрителя, который занял место с номером 2, и так далее. Если место было свободно, то соответствующее число равно 0.
В третьей строке содержится одно число - номер места в билете у опоздавшего зрителя, который в антракте решил пересесть на свое место.
Формат выходных данных:
Выходной файл OUTPUT.TXT должен содержать одно число — количество зрителей, поменявших свои места в антракте, включая опоздавшего зрителя.
var F1,F2 : Text; { Файлы I/O } i : Integer; { Номер билета } A : Array [1..30000] of word; { Массив номеров мест } N : Integer; { Количество мест } Count : Word; { Кол-во зрителей поменявших места }
begin Assign(F1,'INPUT.TXT'); Reset(F1); Assign(F2,'OUTPUT.TXT'); Rewrite(F2); Readln(F1,N); for i:=1 to N do Read(F1,A[i]); { Заполняем массив номерами } Readln(F1,i); { Считываем номер опоздавшего } Count:=0; { Инициализируем счетчик } while A[i]<>0 do { Пока место занято выполнять } begin { -------------------------------- } Inc(Count); { Увеличиваем кол-во пересаживаний } i:=A[i]; { Номер следующего зрителя } end; { -------------------------------- } Writeln(F2,Count); { Записываем результаты в файл } Close(F1); { Закрываем файлы } Close(F2); { -------------------------------- } end.
Флогримм
14.11.2004 9:48
Задача "Навигатор кладоискателя"
Описание Имеется лабиринт прямоугольной формы M на N, в котором в клетке с координатами (KLI, KLJ) зарыт клад (KLI - номер строки, KLJ - номер столбца). Кладоискатель находится в клетке с координатами (1,1), имеет план лабиринта с указанием месторасположения клада.
Задача Определить, какое минимальное количество стен должен разрушить кладоискатель, чтобы добраться до клада.
program find; uses crt; const path='d:\'; {путь к "карте"} filename='lab1.txt'; SizeOfArray=100; {максимальная размерность массива} razd='|';
label step1;
function StrToFloat(str:string):integer; { действует так же, как и аналогичная в Делфи } var code,v:integer; begin val(str,v,code); strtofloat:=v; end;
var fil:text; str:string; m, { кол-во строк } n, { кол-во столбцов } kli, { клад находится в ячейке mas[kli, klj] } klj, i, j, a, walls {кол-во стен (искомая величина) } : byte;
mas: array[1 .. sizeofarray, 1 .. sizeofarray] of byte;
procedure draw; { прорисовка массива } begin for i:=1 to m do begin for j:=1 to n do write(mas[i,j]:3, razd); writeln; end; end;
begin textcolor(white); clrscr; writeln('Путь файла-карты> '+path+filename); assign(fil,path+filename); reset(fil); Writeln('Данные о лабиринте> '); readln(fil,m); gotoxy(21,2); write('Строк m=',m); readln(fil,n); gotoxy(21,3); write('Столбцов n=',n); readln(fil,kli); readln(fil,klj); gotoxy(21,4); write('Клад находится в ячейке: ',kli,'x',klj);
FOR i:=1 to m do begin {считываем лабиринт из файла и записываем в массив} readln(fil,str); for j:=1 to n do mas[i,j]:=StrToFloat(str[j]); end; close(fil); writeln; writeln('Карта> ');
draw;
{ algorithm } step1:
{1} a:=2; mas[1,1]:=a; while (a<m*n) do begin for i:=1 to m do for j:=1 to n do begin if mas[i,j]=0 then begin if mas[i+1,j]=a then mas[i,j]:=a+1; if mas[i-1,j]=a then mas[i,j]:=a+1; if mas[i,j-1]=a then mas[i,j]:=a+1; if mas[i,j+1]=a then mas[i,j]:=a+1; end; end; inc(a); end; {\1}
{2} if mas[kli,klj]<=1 then begin for i:=1 to m do for j:=1 to n do if (mas[i,j]=1) and ((mas[i-1,j]>1)or(mas[i+1,j]>1)or(mas[i,j-1]>1)or(mas[i,j+1]>1)) then begin mas[i,j]:=0; end; inc(walls); goto step1; end; {/2}
{/algorithm} writeln; draw; writeln('Клад найден! Чтобы добраться до него надо проломать ',walls,' стен.'); end.
1 - "Идентифицируем" текущую комнату. 2 - Если в ней нету клада, тогда разрушаем стену, ограничивающую комнату(т.е. объединяем в одну две или больше граничащих друг с другом комнат) и "goto step1;" переходим к шагу 1, иначе выводим искомое значение walls;
Для "идентификации текущей комнаты я использую алгоритм прохода лабиринта методом волновой трассировки" Т.е. мы ячейке mas[1,1]:=2, а затем сканируем массив и если находим ячейку значение которой равно 0 (проходимая ячейка) и у нее в соседях есть ячейка со значением A, тогда текущей присваиваем значение А+1; увеличиваем А на 1;
Пояснение к шагу 2: Если mas[kli,klj] имеет значение 0 или 1, тогда клад не найден, если больше, тогда найден.
Как удалить стену: удаляем все единицы, у которых есть в соседях не единицы.
Флогримм
15.11.2004 11:26
Прохождение лабиринта методом волновой трассировки(или просто волновой алгоритм)!
1) http://www.codemanual.net/main/algo/alg20.htm Достаточно подробное объяснение. Без кода, только алгоритм. В статье описывается метод, когда можно ходить по диагонали! во многих задачах обычно такой возможности нету, так что можно его немного переделать, учтите это.
Игрок А выбирает натуральное число X, 1<= X <= N. Игрок В должен угадать число X при помощи вопросов вида «Число X больше или равно К?», где К – некоторое натуральное число. На каждый вопрос игрока В игрок А отвечает честно и не меняет число X. Игрок В платит игроку А за ответ «Да» - 2 руб., за ответ «Нет» - 1 руб. Определите для данного N наименьшую сумму денег Р(N), достаточную для угадывания любого числа X, 1<= X <= N. Постройте алгоритм, по которому игрок В задаст вопросы таким образом, что угадает число X и при этом заплатит не более Р(N) рублей.
Лабиринт из N комнат задан таблицей соединений(матрица смежности), в которой для каждой пары комнат указано, соединены ли они коридором. Построить путь из комнаты с номером i в комнату с номером j. (реализуется с помощью алгоритма Дейкстры)
__F E__A D__B __C В улье, изображенном на рисунке, ползает пчела. Соты улья представляют собой правильные шестиугольники, поэтому пчела может переползти из одной соты в соседнюю ней через любую из 6 граней. Каждое направление движения обозначается заглавными латинскими буквами от A до F, как показано на рисунке. При записи пути движения пчелы указывается направление движения и число последовательных переходов, совершенных в этом направлении. Так, например, 4 перехода в направлении В записываются как В4. Утром пчела начала свой путь и к вечеру оказалась в некоторой точке улья. Требуется написать программу, которая определяет, за какое минимальное число переходов пчела сможет вернуться в исходную точку, если известна полная запись маршрута. Размер улья можно считать бесконечным.
Формат входных данных: Текстовый файл input.txt, содержащий одну строку, представляющую запись пути пчелы. Считать, что входная строка не более 80 символов и не содержит синтаксических ошибок. Между командами никакие разделители не ставятся. Число повторений, указанное после команды, находится в диапазоне от 1 до 999 включительно. Формат выходных данных (вывод на экран): Целое неотрицательное число - искомое минимальное число переходов Пример 1 файл input.txt: A1B1C1D1E1 Выходные данные: 1 Пример 2 файл input.txt: A32B33D32A1 Выходные данные: 34
<<Произведение дробей>> (12 баллов, 10 секунд на тест)Найти произведение N обыкновенных дробей, записав ответ в виде обыкновенной несократимой дроби. Например, (3/8)*(2/8)*(14/9)=(7/30). Формат входных данных: Текстовый файл input.txt, в первой строке которого записано натуральное число N (1М<10000). В каждой из последующих строк указана пара натуральных чисел - числитель и знаменатель одной дроби. Данные таковы, что числители и знаменатели исходных дробей и числитель и знаменатель ответа после его сокращения не превосходят 30 000. Формат выходных данных (вывод на экран): Два натуральных числа - числитель и знаменатель ответа. Пример: файл input.txt 3 8 2 5 14 9 Выходные данные: 7 30
«Часы» (12 баллов, 1 секунда на тест) Каждая цифры в электронных часах изображена некоторыми из 7 штрихов. Штрихи пронумерованы сверху вниз, слева направо, как показано на рисунке. Цифры получаются следующими штрихами: 0-1,2,3,5,6,7; 1-3,6; 2-1,3,4,5,7; 3-1,3,4,6,7; 4-2,3,4,6; 5-1,2,4,6,7; 6-1,2,4,5,6,7; 7-1,3,6; 8-1,2,3,4,5,6,7; 9-1,2,3,4,6,7. Часы выпущены фирмой «VREMENI.NET», и поэтому в некоторых цифрах часть штрихов пропала. По имеющемуся изображению цифр на часах определить, какое время часы могли бы показывать. Все возможные варианты вывести в порядке возрастания времени. Формат входных данных: Текстовый файл input.txt содержит четыре строки (часы и минуты) по семь символов в каждой. Один символ может быть либо нулем либо единицей: 0 - соответствующий штрих в цифре не горит, 1 - штрих в цифре горит. Например, последовательность 1100010 означает, что горят штрихи 1, 2 и 6. Формат выходных данных: Текстовый файл output.txt, содержащий строки в формате ЧЧ:ММ - возможное время в порядке возрастания. Пример: файл input.txt: 1110111 1110111 1110111 1110111 файл output.txt: 00:00 00:08 08:00 08:08
«Бассейн» (15 баллов, 1 секунда на тест) Бассейн емкостью 500 м3 наполняется из трех труб A, В, С со скоростями потоков 20, 40 и 100 м3/ч соответственно. Слив производится через три стока D, Е, F с пропускными способностями 30, 50 и 80 м3/ч соответственно, либо через естественный перелив. Открытие и закрытие труб/стоков производится только на границе некоторого часа. Имеется журнал открытия и закрытия труб и стоков за сутки, при этом одна и та же труба/сток может за сутки открываться (закрываться) неоднократно. В один и TOT же час возможно несколько операций (над различными трубами/стоками). Определить, в течении какого количества часов (с точностью до 0.001 часа) вода переливалась через край бассейна при условии, что в 0 часов бассейн был пуст. Формат входных данных: В первой строке файла input.txt записано натуральное число N - количество записей в журнале. В каждой из N последующих строк указано целое число - номер часа и через пробел название трубы/стока. Если труба/сток была закрыта - она открывается, если открыта - закрывается. Формат выходных данных (вывод на экран): Действительное число с тремя десятичными знаками после запятой - количество часов, в течение которых вода переливалась через край бассейна. Пример: файл input.txt: 4 0 A 5 С 10 F 11 С Выходные данные: 2.667
<<Стираем числа>> (25 баллов, 1 секунда на тест) На доске записаны подряд натуральные числа от 1 до N (N < 1 000 000 000). Сначала стирают все нечетные числа. Из оставшихся стирают все числа, стоящие на четных местах, затем снова стирают все числа, стоящие на нечетных местах, и так далее, пока не останется одно число. Какое это число? Пример: Входные данные: 10 Выходные данные: 6
<<Строки>> (30 баллов, 1 секунда на тест) На вход подаются строки A и В. Необходимо преобразовать строку A в строку В с минимальным суммарным штрафом, который определяется следующим образом: a) удаление символа из строки A - х баллов; б) вставка символа в строку A - у баллов; в) замена символа в строке A на любой другой символ - z баллов. Напишите программу, определяющую минимальный суммарный штраф при преобразовании строки A в строку В. Формат входных данных: Файл input.txt, содержащий две строки A, В (длины строк < 255) и три целых неотрицательных числа х, у, z - по одному числу в строке. Формат выходных данных (вывод на экран): Одно целое неотрицательное число - минимальный суммарный штраф. Пример: файл input.txt: мама папа 1 1 10 Выходные данные: 4
Jahnerus
26.01.2005 20:47
Нус! ... раз можно постить свои реализации ... то почему бы и нет!
<<Стираем числа>> (25 баллов, 1 секунда на тест)
Реализация(Показать/Скрыть)
uses crt;
function main(n:longint):longint; var step,first,last:longint; b:boolean; begin step:=2; first:=1; last:=n; b:=false; while first<>last do begin if b then begin if (last-first+step div 2) mod step=0 then last:=last-step div 2; end else begin if (last-first) mod step=0 then last:=last-step div 2; inc(first,step div 2); end; step:=step*2; b:=not(b); end; main:=first; end;
begin clrscr; writeln(main(10)); readln; end.
LammerzAttack
5.02.2005 23:33
Имя входного файла: divider.in Имя выходного файла: divider.out Количество тестов: 30 Ограничение по памяти: 1 Мб Ограничение по времени: 1 с
Когда Константин Михайлович Столбов был еще маленьким, он любил играть в интересную игру. Кто-то из его друзей рисовал на доске какое-то число, а Константин Михайлович пытался придумать все такие пары чисел, что их сумма равна данному числу, причем второе число получается из первого вычеркиванием одной цифры. Первое число имеет как минимум две цифры и не должно начинаться с нуля. Второе число должно иметь на одну цифру меньше и может начинаться с нуля.
Формат входного файла Во входном файле записано число 9 < N < 1000000001
Формат выходного файла На первой строве число искомых пар. Далее все возможные пары чисел, подходящих под условие задачи, в порядке возрастания первого числа, по одной паре в каждой строке. Пары должны выводитьсяв формате X + Y = N с пробелами между числами и знаками! В конце каждой строки должен стоять символ перевода строки.
Имя входного файла: maze.in Имя выходного файла: maze.out Количество тестов: 10 Ограничение по памяти: 1 Мб Ограничение по времени: 10 с
Мы блуждаем по зеркальному лабиринту минут двадцать и наконец выходим в большой зал. Тоже зеркальный... Под потолком - балкончики, на которых стоят монстры. Таких я еще не видел - огромные выпуклые глаза, длинные руки, цепко сжимающие винтовки, чешуйчатое тело. В остальном - вполне человеко образные.
Гвардия Принца Пришельцев палит в меня с балкончиков, я тоже стреляю - наугад. "BFG-9000" выжигает три зеркала одним залпом. Помещение наполнено серебряным дымом. Пули колотят по броне, сбивая меня на пол. Стреляю в падении, вращаюсь на спине, словно в забытом танце своей юности - "брейке", еще два раза стреляю. Три зеркала, три зеркала, три зеркала...
(Сергей Лукьяненко "Лабиринт Отражений")
BFG-9000 уничтожает три соседних балкончика с монстрами на них за один выстрел. После выстрела выжившие монстры ранят Леонида (главного героя повести) - 1 процент жизни каждый. Далее следует новый выстрел Леонида, новый выстрел монстров и тд, пока все монстры не погибнут. Необходимо добиться того, чтобы Леонид получил минимальные повреждения в этой схватке.
Формат входного файла В первой строке число 2 < N < 17, количество балкончиков, на который монстры держат круговую оборону. Вторая строка содержит N натуральных чисел - количество монстров на соответствующем балкончике (не менее одного и не более 100 на каждом)
Формат выходного файла Одно число - какое минимальное повреждение может получить Леонид.
Пример maze.in 7 3 4 2 2 1 4 1
maze.out 9
LammerzAttack
14.04.2005 21:39
Вот условие Имя входного файла: polymer.in Имя выходного файла: polymer.out Ограничение по памяти: 1 Мб Ограничение по времени: 10 с
Недавно российские учёные изобрели новый, революционный материал — сверхпрочные полимерные волокна! Их область применеия настолько широка, что пока даже сами учёные не в состоянии представить в каких областях производства они могут пригодится. Но пока учёные решают новую проблему, военные уже утащили новинку себе на вооружение и вовсю производят сверхпрочные защитные костюмы из сверхпрочных полимерных волокн.
Однако при тестировании на полигонах они столкнулись с новой проблемой — оказалось что при пошиве костюма молекулы одной цепочки начинают взаимодействовать друг с другом и взависиомсти от обхвата груди, ширины талии и бедёр солдата прочность костюма резко меняется. Учёные установили, что атомы в полимерных цепочках могут находиться в одном из m состояний (от 0 до m-1, состояния выражаются только целыми числами), где m — число характеризующее волокнистую цепочку полимера. Кроме того, теоретику Обоеву Рулону удалось доказать, что костюм остаётся прочным только если представив последовательность состояний атомов в цепочке в виде числа записанного в системе с основанием m оно делится на число p (число характеризующее обхват груди, ширину талии и бёдер солдата).
Ваша задача помочь учёным написать программу, которая будет определять можно ли из данной цепочки пошить для данного солдата прочный костюм. Формат входного файла
В первой строке целые числа p (1 < p < 256) и m (26 < m < 359). В следующей строке через пробелы записаны состояния всех атомов в цепочке. Кол-во атомов в цепочке не превышает 2000000. Формат выходного файла
YES, если из такого волокна можно сшить прочный костюм солдату. NO, если нельзя. Пример polymer.in
2 3 1 1 polymer.out YES
В примере m меньше 26, так как это пример. Я не понимаю, что здесь надо сделать. Объясните пожалуиста смысл условия.
NightPaladin
14.05.2005 21:01
Вот подумал над позапрошлой задачей. Извини забыл вывод в файл - ну так уж это - приспособишь
Реализация(Показать/Скрыть)
program asd; Uses CRT; var num, count, i : LongInt; { <--- вместо 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.
Вообще честно говоря решил не сам рациональным способом - скорее всего, т.к. оный наверное вообще не рассчитан на перевод в строку... но главное решение...
Я исправил тип с Integer на LongInt, чтобы программа могла работать с большими числами (как указано в условии)
kuzya
21.10.2005 19:15
Задача: Дано выражение x*x+y*y=z*z (так называемые Пифагоровы тройки). Вводится число N (N<=2000), причём x<=N, y<=N. Найти количество троек; все x, y, z, соответствующие данным условиям. X, Y, Z, N - целые положительные числа.
(Ограничение по времени 5 сек.)
Пример: Ввод: 4 Вывод: 1 3 4 5
Решение задачи(Показать/Скрыть)
program troiki; uses crt; var c, cmax, summ, maxsumm: real; n,q: integer; a, amax, b, bmax: longint; begin clrscr; write('n=');read(N); for a:=1 to n do begin for b:=1 to n do begin if a<b then begin { добавление этой строки уменьшит время вычисления } c:=sqrt(sqr( a ) + sqr( b )); if frac( c ) = 0 then begin summ:=(a+b+c); if summ>maxsumm then begin maxsumm:=summ; amax:=a; bmax:=b; cmax:=c; end; q:=q+1; end; end; end; end; writeln; writeln(q); writeln(amax,' ',bmax,' ',trunc(cmax)); writeln(trunc(maxsumm)); readkey; end.
Однако при N = 1700 вычисление длится больше 5 сек.
kuzya
24.10.2005 18:43
Задача: Дано натуральное число К. Напечатать К-ую цифру последовательности 123456789101121314..., в которой выписаны все подряд натуральные числа. (Последовательность в ЭВМ не вводить)
Есть решение(Показать/Скрыть)
program chisla; uses crt; var i, n, i1: longint; s, d: string; begin clrscr; read(n); for i:=1 to n do begin str(i,s); if (length(d))<=n then d:=d+s; end; writeln; writeln(d); writeln(d[n]); readkey; end.
Добавлено (Volvo): Чтобы не было проблем с переполнением строки при больших K, эту задачу лучше решать на основе инварианта.
Первые 9 цифр - это однозначные числа (1 .. 9), вторые 90 - двухзначные (10 .. 99), дальше 900 трехзначных (100 .. 999), и т.д.
By Volvo (Показать/Скрыть)
function get_digit(n: longint): char; var i: longint; digits: byte; start_of, maximal: longint; num_of_n, num_of_digit: integer; s: string; begin digits := 1; start_of := 0;
maximal := 9; while n > digits * maximal + start_of do begin inc(digits); maximal := maximal * 10; inc(start_of, pred(digits) * (maximal div 10)); end; maximal := maximal div 10;
dec(n, start_of); num_of_n := (n div digits) + byte((n mod digits) <> 0); num_of_digit := n - digits * pred(num_of_n);
n := 1; for i := digits downto 2 do n := n * 10; str(n + pred(num_of_n), s); get_digit := s[num_of_digit]; end;
Completed in 0.046999845653772 seconds
**********
By klem4(Показать/Скрыть)
function DigitInfo(const k: LongInt): Char; var temp, curr, digit_len, digit_owner_number, digit_group: LongInt; digit_pred_group: LongInt; s: String; begin digit_group := 9; digit_pred_group := 0; digit_len := 1; temp := 9;
while (k > digit_group) do begin inc(digit_len); temp := 9 * digit_len * round(exp(pred(digit_len) * ln(10))); digit_pred_group := digit_group; digit_group := temp + digit_group; end;
function GetNextDigit: integer; var digit: integer; begin // получаем следующее натуральное число if needNewNumber then begin needNewNumber := false; inc(counter); number := counter; if (counter mod nextDecimalMask) = 0 then begin maxDecimalMask := nextDecimalMask; nextDecimalMask := maxDecimalMask * 10; end; // сбрасываем маску decimalMask := maxDecimalMask; end; // получаем число в разряде digit := number div decimalMask; number := number mod decimalMask; decimalMask := decimalMask div 10; // если маска нулевая, то мы разобрали число if decimalMask = 0 then needNewNumber := true; // возвращаем результат GetNextDigit := digit; end;
var i: integer; digit: integer; begin Init; // тупо перебираем k-разрядов digit := 0; for i := 1 to k do digit := GetNextDigit; // возращаем результат GetDigit := digit; end;
Completed in 30.46800009906292 seconds
**********
By Malice(Показать/Скрыть)
function test (x:longint): char; var i:longint; s:string; begin i:=0; repeat inc (i); str (i,s); if x<=length(s) then begin test:=s[x]; x:=0; end else x:=x-length(s); until x=0; end;
Память на жестком диске компьютера разбита на параграфы, каждый размером 16 Кб. Файл может занимать только целое кол-во параграфов, даже если параграф занят не весь, то он все равно отдается файлу полностью. Во входном файле в одной через пробел указаны размеры файлов в байтах. Определите объем, занимаемый директорией на жестком диске.
В файле задано некоторое кол-во цифр N (N<=10000). Цифры расположены в одне строчку и разделены пробелами. Требуется определить, можно ли из данных цифр составить N-значное простое число (нужно использовать все заданные числа и только их). Если возможно составить несколько N-значных чисел, программа должна определить их все. В первой строке выходного файла должно быть указано кол-во простых чисел, далее в каждой строке по одному числу.
Nosferatu
25.11.2005 1:05
Площадь прямоугольников Дано N прямоугольников со сторонами, параллельными осям координат. Требуется пределить площадь фигуры, образованной объединением данных прямоугольников. Ввод из файла rectarea.in В первой строке находится число прямоугольников - N. Затем идут N строк, содержащих по 4 числа: X1, X2, Y1, Y2 - координаты двух противоположных углов прямоугольника. Вывод в файл rectarea.out Вывести одно число - площадь фигуры
Пример Ввод 2 1 1 3 3 2 2 4 4 Вывод 7
minkod
1.12.2005 21:16
1. В трехмерном пространстве задан куб с ребром длиной 1. Одна из вершин в точке с координатами, например,(0.0.0), а противоположная с координатами (1,1,1). По двум введенным вершинам определить, находятся ли они на одном ребре куба или на одной его грани.
2. По ребрам куба ползут тараканы. Все они ползут из вершины (000) в вершину (111) так, что каждый из них проползает при этом три ребра. Найти самое «истоптанное» ребро.
3. Нужно расшифровать длинное секретное донесение. Таблица кодировки неизвестна, зато известно, что каждый символ закодирован восемью битами.
4. Вводится последовательность целых чисел (в диапазоне от -32000 до 32000). Требуется разбить их на пары так, чтобы произведения чисел в парах были одинаковы. Входные данные: Вводится N (количество чисел), 1<=N<=100. Затем вводятся N целых чисел. Выходные данные: Если разбить на пары можно, то выдать произведение чисел в паре (все варианты), иначе - сообщение "Нет решения".
5. Есть N лампочек и М переключателей, каждый из которых какие-то лампочки переключает, а какие-то нет. Сначала часть лампочек включена. Договоримся горящие лампочки обозначать I. а выключенные - 0. Для переключателей будем писать I, если переключатель меняет состояние данной лампочки, и 0, если не меняет. Тогда любой переключатель можно представить строкой из N нолей и единиц. Начальное и конечное состояние лампочек также закодируем строкой из 0 и I. «Применение» переключателя к лампочкам приводит к тому. что включенные лампочки становятся выключенными, а выключенные включенными (естественно, это справедливо только для лампочек, к которым есть доступ от этого переключателя) Напишите программу, которая определяет, какие переключатели нужно применить, чтобы лампочки перешли в конечное состояние. Входные данные: Вводятся числа N и M (1<=N<=50,1<=M<=50). Вводится строка, характеризующая конечное состояние лампочек. Вводится M строк, характеризующих переключатели. Выходные данные: Номера переключателей , которые нужно применить, причем каждый переключатель можно применить не более 1 раза, либо сообщение "Нет решения".
hardcase
25.01.2006 1:38
Брутальня задача с контеста в CBOSS, когда-то пытался решить - не вышло.
Цитата
"Миное поле чудес" находилось на окраине Тьмускорпионии. Его карта представляла собой прямоугольник из клеток. В каждой клетке может находится либо не находится одна мина. На данный момент поле было частично исследовано - то есть про некоторые клетки известно, есть там мина или нет. При отсутствии мины в клетке известно общее кол-во мин в соседних (по стороне и углу) клетках. Известно также общее кол-во мин на поле. В данной задаче по заданной начальной ситуации вы должны определить вероятности нахождения мин в неоткрытых клетках. Под вероятностью того, что в данной клетке находится мина, понимается отношение количества возможных вариантов расстановки мин, при которых в данной клетке находится мина, к общему количеству вариантов. При подсчёте кол-ва вариантов, мы должны считать только те расстановки, которые согласуются с заданной начальной ситуацией. Гарантируется, что начальная ситуация задана корректно, т.е. существует по крайней мере одна расстановка мин, с ней согласующаяся. Также гарантируется, что кол-во клеток, соприкасающихся с открытыми клетками, не превышает 25.
Input: В первой строке файла записаны через пробел три целых числа N, M, K. M и N - размер поля (2<=N, M <= 20), а K - общее количество мин (0 <= K <= N x M) В последующих N строках задаётся само поле. Каждая строка - M символов, каждый из которых описывает клетку поля. Символы '0'..'9' обозначают кол-во мин в соседних клетках. Прописная латинская 'X' - неоткрытая клетка. 'M' - клетка, в которой точно есть мина.
Output: В первой строке выходного файла всё те же N M K, в последующих - N строк по M вещественных чисел, каждое из которых - вероятность нахождения мины в соответствущей клетке.
Bill Gates
25.05.2006 23:42
ФАЙЛОВЫЙ МЕНЕДЖЕР Имя входного файла: far.in Имя выходного файла: far.out Петя работает над очень большим проектом. Проект содержит N файлов. В процессе работы Пете часто приходится просматривать и редактировать файлы. Для ускорения работы Петя использует файловый менеджер FAR Menager, который отбражает список имен файлов проекта в некотором порядке. В текущей версии FAR Manager'а для перемещения по списку имен файлов есть следующие возможности: 1) Можно нажать клавишу "вниз", при этом курсор перемещается на следующий файл в списке. Для последнего файла в списке следующим считается первый. 2) Можно нажать клавишу "вверх", при этом курсор перемещается на предыдущий файл в списке, для первого файла предыдущим считается последний. 3) Можно нажать клавишу "Alt" и, удерживая ее, набрать последовательность латинских букв. После этого клавишу "Alt" следует отпустить, и в этот момент курсор переместится на ближайший файл, имя которого начинается с заданной последовательности символов. Ближайший файл - это файл, на который можно переместиться за наименьшее количество нажатий клавиши "вниз". Если заданная последовательность является началом имени текущего файла, или файла, имя которого начинается с этой последовательности, не существует, то курсор остается на месте. Первая и вторая из описанных возможностей файлового менеджера требуют по одному нажатию на клавиши, а третья - одного клавиши "Alt" плюс нажатий, равное длине набранной последовательности латинских букв. Файлы пронумерованы от 1 до N в порядке их следования. После загрузки FAR Manager'а курсор находится на первом файле. Петя знает, что ему придется редактировать файл с номером a[1], затем с номером a[2] и так далее, а последним - файл с номером a[k]. В последовательности a[1], a[2], ..., a[k] один и тот же номер может встечаться несколько раз. При каждом перемещении от одного файла к другому Петя хочет нажимать как можно меньше клавиш. Требуется написать программу, которая выдает искомую последовательность нажатий клавиш.
ФОРМАТ ВХОДНЫХ ДАННЫХ В первой строке входного файла записано целое число N (1 <= N <= 1000) - количество файлов в проекте. В следующих N строках записаны имена файлов, по одному в каждой строке. Файлы перечеслены в том порядке, в котором они отображаются файловым менеджером. Имена состоят только из строчных латинских букв. Длина каждого имени не превосходит 2000 символов. Все имена файлов различны. Далее в следующей строке записано целое число k (1 <= k <= 10). Последняя строка входного файла содержит k целых чисел a[1], a[2], ..., a[k] (1 <= a <= N) - номера редактируемых файлов. Редактирование файлов выполняется в том порядке, в котором они встречаются в последовательности a[1], a[2], ..., a[k].
ФОРМАТ ВЫХОДНЫХ ДАННЫХ Выходной файл должен содержать описание искомой последовательности нажатий клавиш в виде k блоков информации: * Первый блок информации описывает перемещение от файла с номером a[1] к файлу с номером a[2]. * Второй блок информации описывает перемещение от файла с номером a[2] к файлу с номером a[2]. * ... * k-ый блок информации описывает перемещение от файла с номером a[k-1] к файлу с номером a[k]. Каждый блок информации выглядит следующим образом. В первой строке блока записывается число L - наименьшее количество нажатий клвиш, необходимое для перемещения от очередного файла последовательности к следующему. Следующие L строк блока описывают нажаимаемые клавиши. Каждая из строк содержит описание одной клавиши: * Если нажимается клавиша "вниз", то в строке записывается слово down * Если нажимается клавиша "вверх", то в строке записывается слово up * Если нажимается клавиша "Alt", то в строке записывается слово Alt * При нажатии клавиши с латинской буквой выводится соответсвующая ей латинская буква Если существует несколько оптимальных вариантов перемещения, то требуется вывести любой из них.
ПРИМЕРЫ ========== ========== far.in far.out ========== ========== 6 1 submit up monitor 3 monitorx Alt monyator m subversion down sub 0 5 2 6 3 3 5 2 down down 2 Alt m ========== ========== 8 3 abc Alt abv a abba u test 2 auvto down ioi down olympiad 2 4 6 ========== ==========
Кот в шляпе. Был кот с волшебной шляпой, любил погадить, но вот пришло время убираться, но "Зачем работать, если есть Волшебная шляпа?", - подумал кот. Кот достает из шляпы N количество котов поменьше; размер котов, которых он достает в N+1 раз меньше размера кота. Но эти котики поменьше тоже ленивые и тоже с волшебными шляпами, в конце концов работают только самые маленькие коты размером 1, которые не чего не могу достать из своей шляпы.
Входные данные (читаются из файла Input.txt): размер самого большого кота, количество работающих котов. Выходные данные (пишутся в файл Output.txt): общий размер всех котов, количество не работающих котов. Регламент: время 0.5 сек, 1 Мб, N < 1 000 000
Пусть количество работающих котов K, размер главного кота P. Все задача сводится к нахождению N, это делается не столько сложно, так как каждый раз из шляпы выходят N котов с массой N+1/(размер кота, который вытаскивает из шляпы котов), то получаем цикл:
For i:=1 to 32 do begin if exp((1/i)*ln(k))-exp((1/i)*ln(p))=1 then begin n:=i; Break; end; end;
. Цикл до 32 потому что N > 1 000 000 больше просто не может быть. Нашли N, все остальное понятное дело ищется по формуле. Тут есть 1 частный случай, когда входные данные 1 1, на выходе соответственно получаем 1 0.
Sufix
5.11.2006 8:52
Дано два числа a и b. Вывести их разность (a-b). Входные данные Во входных данных содержатся два числа a и b, разделенные пробелом Выходные данные Выведите одно число - искомую разность. Ограничения a,b<=10 в 100 степени
Поздравив ослика Иа с днём рождения (описание праздника мы пропустим), вдруг обнаружилось, что у именинника пропал хвост! Как всегда, его украл слонопотам. В сказочном лесу n селений. Некоторые из селений соединены дорогами. Время передвижения по каждой дороге, соединяющей селения, известно. Никакие две дороги не пересекаются вне селений. Благодаря новейшей системе GPS, введенной недавно в лесу, нам известно, что слонопотам сейчас находится в селении v. Иа и его гости в это время находятся в селении u. Для того, чтобы сделать именинника счастливым, необходимо срочно добраться до города v и отобрать похищенный хвост у злобного слонопотама! Помогите друзьям Иа-Иа определить минимальное время, за которое они смогут добраться до слонопотама. Входные данные: В первой строке входных данных содержатся три числа: n, u и v (1<=n<=100; 1<=u,v<=n), где n - количество селений, u - селение, в котором находятся спасители хвоста, а v - селение, в котором засел слонопотам. В следующих n строках содержится по n чисел. J-е число на строке I определяет дорогу между селениями i и j. Если это число равно -1 - то селения i и j не соединены дорогой. Если число является неотрицательным - то это означает, что между селениями i и j есть дорога, и время проезда по этой дороге равно этому числу. Заметьте, что поскольку лес - волшебный, то наличие дороги из i в j не гарантирует наличие дороги из j в i, к тому же, даже если существуют дороги в обе стороны, то время проезда по дорогам, соединяющим одни и те же селения, может различаться в зависимости от направления движения. Выходные данные Выведите искомое минимальное время или -1, если пути между селения u и v не существует. Примеры Входные данные 3 1 2 0 -1 2 3 0 -1 -1 4 0 Выходные данные 6 P.S. буду благодарен по гроб жизни, если поможете, или хотябы намекнете в сторону чего смотреть
t3rmin@1
9.12.2006 0:40
Помогите плиз с задачкой.
Нужно составить расписание автобусов
Есть исходный файл c:\data2.txt, в котором содержатся данные. Первая строка содержит 4 целочисленных цифры: количество остановок (не больше 100), скорость в км/ч, начало отъезда из начальной остановки в часах, четвёртая - то же самое, но в минутах. Остальные строки содержат инфо о остановках: название (длина названия - не более 15 символов) и расстояние между пунктами в км в вещественном представлении.
Например: 3 60 10 15 Chicago 30.25 Detroit 27.09 Boston 10
т.е. расстояние между Chicago и начальной остановкой - 30.25, между Detroit и Chicago - 27.09 и т.д.
Нужно записать данные в файл c:\data3.txt в таком виде:
Сhicago 10 hr 58 min Detroit 11 hr 59 min Boston 12 hr 35 min
Требования к программе: данные и результаты хранить в массиве (массивах) с элементами типов записей (type=record..end;) создать и использовать процедуру считывания данных в массих с элементами типов записей. создать и использовать процедуру для записи результата в файл использовать в программе функцию:
function time(s,v:real):integer; begin time:=Trunc(s/v*60); end; где s - расстояние, пройденное автобусом, v - средняя скорость автобуса в км/ч.
Самая большая проблема для меня - считать данные из файла. Хотя бы это напишите, пожалуйста
mamont001
17.12.2006 16:32
Куреры
В городе X все жители очень любят пиццу .компания 3 толстяка решила на етом заработать. По всему городу на перекрестках она раставила N куреров .В городе живет M толстяков. Составить програму ,которая бы высчитала минимальное растояниекоторое должны пройти куреры. M>N 2<N<1000000 4<M<10000000000 Длинной арифметикой пользоватся запрещается!!!
Формат входного файла courier.in 1 стока : N M 2 строка : кординаты всех N 3 строка : кординаты всех m
Формат выходного файла courier.out X
Решение(Показать/Скрыть)
(Я точно не помнил где M ,а где N )
uses crt; const g=100; h=1000; var x:array [1..1000] of integer; y:array [1..1000] of integer; n,m,i,j,min,zuy:integer; f,f1:text; Begin randomize; assign(f,'c.pas'); rewrite(f); assign(f1,'co.pas'); rewrite(f1); n:=random(g)+1; m:=random(g)+1; writeln(f,n,' ',m); for j:=1 to h do begin if j<=n then begin x[j]:=random(h); write(f,' ',x[j],' '); end; end; writeln(f,' '); for i:=1 to h do begin if i<=m then begin y[i]:=random(h); write(f,' ',y[i],' '); end; end; zuy:=0; for j:=1 to h do begin if j<=n then begin min:=abs(x[j]-y[1]); for i:=1 to h do if i<=m then begin if abs(x[j]-y[i])<min then min:=abs(x[j]-y[i]); end; zuy:=zuy+min; end; end; write(f1,'',zuy,' '); close(f); close(f1); End.
Кстати у меня в примере все несколько обрезано, потому-что я не знаю как ещё обеспечить большие числа
ammaximus
23.12.2006 19:09
Час назад закончился 2 этап Росиийской олимпиады школьников по информатике. Будем ждать результатов, а пока... Задача 1. Даны два слова А и В. Проверьте, можно ли из букв слова А составаить В. Каждый символ из А использовать не более 1 раза.
Задача 2. Очки на игральных кубиках располагаются так, чтобы совпадали суммы чисел на противоположных гранях:1+6=2+5=3+4=7. Составьте программу, которая по заданному (неупорядоченному) набору из 6 целых чисел из диапазона 1 .. 10 000 проверяла бы, можно ли разместить их на гранях кубика таким образом, чтобы выполнялось это правило. Если можно - вывести сумму, иначе символ N. Пример: 1,2,3,4,5,6; Результат 7.
Задача 3. Числом Армстронга называется число из n цифр, если сумма его цифр, возведенных в n-ю степень равна самому числу. Найти все n-значные числа Армстронга (1<n<10). Пример: 153=1^3+5^3+3^3 - число Армстронга.
Задача 4. Числа от 1 до n расставлены по кругу. Вычеркиваем каждое второе число, начиная с 1. Написать программу, которая определит какое число останется последним и напечатает его. Исходное натуральное число - 1<n=<=1 000 000. Общий случай: определите количество шагов для произвольного числа.
Vinchkovsky
11.01.2007 0:04
Задача 1(Показать/Скрыть)
Как и обещал, полностью верна и оптимизированная под разные размещения первого и второго слов
program Zadacha1; uses Crt; var c:boolean; a,b:string; function Sovmestimost(a,b:string):boolean; var len1,len2,i,ii,res:integer; aM,bM:array [1..20] of string; d3:boolean; begin res:=0; len1:=length(a); len2:=length(b); for i:=1 to len1 do aM[i]:=copy(a,i,1); for i:=1 to len2 do bM[i]:=copy(b,i,1); for i:=1 to len2 do for ii:=1 to len1 do if bM[i]=aM[ii] then begin res:=res+1; aM[ii]:=''; bM[i]:='*' end; if res=len2 then d3:=true else d3:=false; Sovmestimost:=d3 end; begin clrscr; writeln('Vvedite pervoe slovo'); readln(a); writeln('Vvedite vtoroe slovo'); readln(b); if length(a)>length(b) then c:=Sovmestimost(a,b) else c:=Sovmestimost(b,a); if c=true then writeln('YES') else writeln('NO'); readln end.
Задача 2(Показать/Скрыть)
program Zadacha2; uses Crt; const n=6; type masyv=array [1..n] of integer; var a,b:masyv; i,ii,x:integer; begin clrscr; writeln('Vvedite 6 chusel'); for i:=1 to n do readln(a[i]); for i:=1 to n-1 do for ii:=i+1 to n do begin if a[i]>a[ii] then begin x:=a[i]; a[i]:=a[ii]; a[ii]:=x end end; if (a[1]+a[6]=a[2]+a[5])and(a[2]+a[5]=a[3]+a[4]) then writeln(a[1]+a[6]) else writeln('N'); readln end.
Задача 3 (не оптимизированная)(Показать/Скрыть)
program zadaha3; uses Crt; var n,d5,k,ii:integer; min,max,i,control:longint; iText:string; iLetter:array [1..10] of string; iDigit:array [1..10] of integer;
function Stepin(x,y:integer):integer; var d1:integer; d2:integer; begin d2:=x; for d1:=1 to y-1 do d2:=d2*x; Stepin:=d2 end;
function Minimal(n:integer):longint; var d3:integer; d4:longint; begin d4:=1; if n=0 then d4:=1 else for d3:=1 to n-1 do d4:=d4*10; Minimal:=d4 end;
begin clrscr; writeln('Vvedite n'); readln(n); min:=Minimal(n); max:=Minimal(n+1)-1; for i:=min to max do begin control:=0; str(i,iText); for ii:=1 to n do begin iLetter[ii]:=copy(iText,ii,1); val(iLetter[ii],iDigit[ii],d5) end; for ii:=1 to n do control:=control+Stepin(iDigit[ii],n); if control=i then begin writeln(i); k:=k+1 end end; writeln('Vsego chusel Armstronga ',k); readln end.
Задача 2 (20 баллов из 130, 2 этап Всеукраинской школьной олимпиады)
Городок состоит из n домов, которые стоят вдоль прямого шоссе на одном расстоянии один от одного. В городке проводят телефонное подключение, в каждом доме нужно поставить k (0<=k<=30000). В первом рядке файла TEL.DAT содержится количество домов (1<=n<=1000). В следующем рядке через пропуск - количество телефонов, которые должны быть установлены в домах. Вывести на экран и в первый рядок файла TEL.SOL номер дома, в котором нужно поставить АТС, чтобы общее количество кабеля от каждого телефона к АТС было минимальным. Если таких домов несколько, то написать их в порядке увеличения через пропуск. Каждый телефон соединен отдельным кабелем. Если телефон находится в том доме, что АТС, то считать, что кабеля не ведем. Пример входных данных: 5 1 2 3 2 1 Пример выходных данных: 3
Zzzz...
19.02.2007 20:45
Задача A. Закон Амдала
Имя входного файла: amhdal.in Имя выходного файла: amhdal.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта
Параллельное программирование изучает методы построения программ, которые будут выполняться на нескольких процессорах. В результате решения одной из первых задач этого раздела информатики появился закон Амдала. Задача Амдала формулировалась так. Имеется n процессоров и p процентов вычислений не могут выполняться параллельно. Во сколько раз быстрее можно выполнить вычисления по сравнению с одним процессором? Например, если n = 10, p = 50, а на одном процессоре все вычисления выполняются за время t. Тогда первая половина вычислений (50%) будет выполнена за время t / (2•10) , а вторая — за время t / 2. Общее время вычислений в этом случае составит t / 2 + t / 20 = 11•t / 20, а ускорение по сравнению с одним процессором составит 11 / 20 раза. Если же n = 10, p = 25, и на одном процессоре все вычисления выполняются за время t. Тогда 75% вычислений будут выполнены за время 3•t / (4•10) , а оставшиеся 25% — за время t / 4 . Общее время вычислений в этом случае составит t / 4 + 3•t / 40 = 13•t / 40 , а ускорение по сравнению с одним процессором составит 40/13 раза. Даны числа n и p. Напишите программу, решающую задачу Амдала.
Формат входного файла
Входной файл содержит два целых числа n (1 ≤ n ≤ 1000) и p (0 ≤ p ≤ 100).
Формат выходного файла
В выходной файл выведите ответ на задачу с точностью не хуже 10−6.
Имя входного файла: biathlon.in Имя выходного файла: biathlon.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта
На Зимних Олимпийских Играх традиционно проводятся соревнования по биатлону. Как известно, этот вид спорта содержит лыжные гонки и стрельбу по мишеням из винтовки. На каждом огневом рубеже расположены 5 мишеней. Каждая из них имеет форму круга радиусом 10 см, а расстояния между центрами соседних мишеней одинаковы и равны 25 см. Центры мишеней при этом расположены на одной горизонтали. Введем прямоугольную систему координат так, что начало координат расположено в центре самой левой мишени, ось Ox направлена вправо, а ось Oy — вверх. Таким образом, центры мишеней имеют координаты (0, 0), (25, 0), (50, 0), (75, 0) и (100, 0). Для информационного обеспечения проведения соревнований было решено разработать систему подсчета количества пораженных мишеней. Эта система по точкам, в которые попали пули после выстрелов спортсмена, должна определять количество пораженных мишеней. Мишень считается пораженной, если в нее попала хотя бы одна пуля (при этом, разумеется, если в мишень попали две или больше пуль, то попадание считается только один раз). На спринтерской гонке на каждом огневом рубеже у спортсмена есть 5 пуль. Вам даны координаты точек, в которые попали пули после выстрелов спортсмена. Определите количество пораженных мишеней.
Формат входного файла
Входной файл содержит ровно пять строк: i-ая из них содержит два целых числа xi и yi — координаты точки, в которую попала пуля после i-ого выстрела спортсмена. Все числа во входном файле не превосходят 1000 по модулю.
Формат выходного файла
В выходной файл выведите единственное число — количество пораженных мишеней.
Имя входного файла: list.in Имя выходного файла: list.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта
В наше время создатели офисных приложений стараются сделать все для удобства пользователя. Поэтому даже такая мелочь, как представление на экране списков чисел — например, для вывода номеров страниц, — должна быть тщательно проработана. Вы должны реализовать функцию, которая по заданному набору целых чисел будет формировать строку, являющуюся его самым коротким текстовым представлением. Текстовое представление — строка, состоящая из разделенных запятыми чисел и диапазонов чисел вида «a, ..., b», которые используются для записи набора всех чисел от a до b. При этом все числа, входящие в строку должны быть упорядочены по возрастанию в том порядке, в котором они встречаются в строке.
Формат входного файла
В первой строке входного файла содержится целое число n (1 ≤ n ≤ 1000) — размер набора. Вторая строка содержит n задающих набор целых чисел, по абсолютной величине не превосходящих 10000, разделенные пробелами. Одно число может встречаться в этом описании несколько раз.
Формат выходного файла
В первой строке выходного файла запишите одно из кратчайших текстовых представлений заданного набора чисел. Следите за правильной расстановкой пробелов. Выходной файл в примере содержит ровно три пробела.
Телефонный номер называется «шахматным», если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных «шахматных» номеров, начинающихся с заданной цифры.
1 2 3 4 5 6 7 8 9 0
Я надеюсь что сделал эту прогу...
А вот и решение:(Показать/Скрыть)
uses crt; var r,s,i,l,k:integer; d,c:array [0..25] of integer;
На шахматной доске 8 на 8 нужно расположить 8 ферзей так,что бы они не били друг друга. Формат ответа: Порядковый номер клетки снизу-вверх: 14747256 так расположено в файле
Dmitriy
3.05.2007 5:12
Цитата(AlaRic @ 8.03.2003 18:52)
Автобусные билеты в рулоне пронумерованы от 000001 до 999999. Составить программу, выводящую на экран количество и номера (в несколько столбиков) всех счастливых билетов в некотором диапазоне, организовав запрос начального и конечного номера билета диапазона. Примечание: Счастливым считать тот билет, у которого сумма первых трех цифр равна сумме трех последних.
Решение:(Показать/Скрыть)
program podschet; uses crt; const c=9; var m,s1,s2,s3,s4,s5,s6,a,k:longint; file1:file of longint; begin clrscr; assign(file1,'c:\file1.txt'); rewrite(file1); k:=0; m:=0; for s1:=0 to c do for s2:=0 to c do for s3:=0 to c do for s4:=0 to c do for s5:=0 to c do for s6:=0 to c do begin if m<>0 then if (s1+s2+s3)=(s4+s5+s6) then begin a:=s1*100000+s2*10000+s3*1000+s4*100+s5*10+s6; write(file1,a); k:=k+1; end; m:=m+1; end; writeln('kolichestvo biletov=',k); close(file1); readln; end.
Postman
11.07.2007 20:45
Задача "Вирус" Имя входного файла: Input.txt Имя выходного файла: Output.txt
Колония клеток представляет собой квадратную матрицу порядка N (N<500). В колонию проникает M (M<11) вирусов, которые поражают клетки с координатами (X1,Y1), ... ,(Xm,Ym). За одну единицу времени вирус проникает в клетки, соседние с зараженными (соседними считаются клетки, имеющие общую сторону). Требуется написать программу, которая определит время заражения всей колонии.
Входные данные Формат входных данных: 1 строка - N 2 строка - M 3 строка - X1 Y1 4 строка - X2 Y2 ... M+2 строка - Xm Ym
Выходные данные В выходной файл запишите число - время заражения.
Пример входного файла 5 2 1 2 5 5 Пример выходного файла 4
kornet
14.07.2007 18:38
Цитата
Автобусные билеты в рулоне пронумерованы от 000001 до 999999. Составить программу, выводящую на экран количество и номера (в несколько столбиков) всех счастливых билетов в некотором диапазоне, организовав запрос начального и конечного номера билета диапазона. Примечание: Счастливым считать тот билет, у которого сумма первых трех цифр равна сумме трех последних.
Решение:(Показать/Скрыть)
program podshet; var start, finish, sum : longint; begin write ('Vvedite perviy i posledniy nomer diapasona >'); readln (start, finish); sum := 0; repeat if (start div 100000 + start div 10000 mod 10 + start div 1000 mod 10) = (start div 100 mod 10 + start div 10 mod 10 + start mod 10) {сравниваем сумму первых и последних трех цифр} then begin writeln ('S4astliviy bilet: ', start); sum := sum + 1 end; start := start + 1 until start > finish; writeln ('Vsego s4astlivix biletov ', sum); readln end.
Цитата
На судоверфь для докового ремонта пришли пять судов А, В, С, D, Е. В доке судоверфи может находиться только одно судно. Необходимое время стоянки в доке каждого судна различно и составляет соответственно МА, МВ, МС, MD и МЕ. Составить программу, определяющую и выводящую на экран очередность постановки судов в док, при которой суммарные потери от простоя судов минимальны.
Решение:(Показать/Скрыть)
program korabli;
type index = 'A'..'E'; ships = array [index] of char; timetostay = array [index] of integer;
var ship : ships; time : timetostay;
procedure initialise ( var ship : ships; var time : timetostay);
var i : index;
begin WriteLn ('Enter time of every ship'); for i := 'A' to 'E' do begin ship [i] := i; write ('Ship ', ship[i], ': '); readln (time[i]) end end;
procedure sort (var ship : ships; var time : timetostay);
var temp : integer; i, i2 : index;
begin for i := 'A' to 'E' do begin for i2 := i to 'E' do begin if time [i2] < time [i] then begin temp := time[i]; time [i] := time [i2]; time [i2] := temp; temp := ord (ship[i]); ship [i] := ship [i2]; ship [i2] := chr (temp) end end end end;
procedure display (var ship : ships; var time : timetostay);
var i : index;
begin writeln ('The best variant'); for i := 'A' to 'E' do begin writeln (chr (ord(i) -16), ') ', ship[i],' - ', time [i]) end end;
Олимпиада еще не кончилась, решения будут принимать до 15.00... Но вряд ли за час кто-то кинется выкладывать свои мысли, поэтому размещу условия.
1. В шар радиуса R помещается кубическая решетка с размером ячейки 1. Один из узлов решетки совпадает с центром шара. Таким образом, самый удалённый от центра узел может находиться на расстоянии, не большем R.Требуется определить, сколько узлов решетки попадают внутрь шара.
2. Имеется набор из N десятичных цифр (3<=N<=19). Требуется найти все возможные варианты равенства вида: A * B = C, где A, B и C – числа, составленные из этих цифр. В каждом примере умножения должны быть использованы все цифры набора, причем каждая – ровно один раз. Запись числа не может начинаться с цифры 0, за исключением числа ноль.
3. Робот “Суперслизень-2007” ползает по плоскости, оставляя за собой тонкий след краски. Движение робота описывается его программой – строкой из команд N, W, S, E. По команде N робот проползает один метр в северном направлении, по команде W – один метр в западном направлении, S – один метр южном направлении, E – один метр в восточном направлении. Программа составлена так, что путь робота начинается и заканчивается в одной точке; кроме неё, ни в одной другой точке плоскости робот не бывает больше одного раза. Необходимо найти площадь участка, границей которого служит след Суперслизня после завершения роботом программы.
Задачи взяты отсюда. От 1 и 3 потом выложу свои решения, а вот вторую толком не решила (перебор - это не решение. да и по времени не укладывается в разрешенные 20сек)...
Zzzz...
29.10.2007 20:25
Это задачи с VIII Всероссийской командной олимпиады школьников по программированию (ВКОШП)
mega111
5.11.2007 12:57
Известный скульптор решил создать монумент под названием "Мост между Востоком и Западом". "Мост" он решил выложить из блоков, оставшихся посл разборки Берлинской стены, а по краям "Моста" постановить 20-метровые аллегорические фигуры Востока и Запада. "Мост " должен выглядить как лестниц, сначала растущая на 1 фунт от ступеньки к ступеньке, затем убывающая таким же образом. Каждая ступенька представляет собой штабель *параллелипипед) из положенных друг на друга блоков гранями с одинаковыми размерами. Разные ступеньки могут иметь разную ширину и длину, так как блоки можно ставит друг на друг тремя способами. Чтобы "Мост" не терялся на фоне гигантских скульптур, его высота должная быть как можо больше, а сред вариантов с одинаковой максимальной высотой предпочтительней вариант с большей длиной. Напишите программу, которая вычислит максимальную высоту и длину моста по количеству имеющихся блоков и их размерам. После строительства "моста" может остаться несколько лишних блоковю Ввод содержит три целых числа N (1<=N<=5000) W (1<=W<=50) H )1<=H<=50) -количество имеющихся в наличии блоков, ширина и длина блока в футах )толщина блока равна 1 фут)ю\Вывести два целых числа - максимальную высоту моста и его длиную Пример ввода 5 10 20 ПВывод для примера: 2 60 P.s. в задаче ввод данных производиться из файла INPUT.TXT а вывод результата в файл OUTPUT.TXT.Формат ввода соответсвует спецификации
renesko
2.12.2007 18:54
A. Треугольники На плоскости расположено N невырожденных треугольников. Найдите точку плоскости, которая покрывается наибольшим количеством треугольников. Если таких точек несколько, достаточно найти любую из них. Точка покрывается треугольником, если она лежит внутри него, либо на его границе. Треугольник задается координатами своих вершин. Ограничение на N поставьте сами.
B. Волшебные вектора Назовем упорядоченный по неубыванию набор из N натуральных чисел волшебным N-вектором, если сумма этих чисел равна их произведению. Задано число N. Найдите все волшебные N-вектора. Например, существует 3 волшебных 5-вектора: 1 1 1 2 5 1 1 1 3 3 1 1 2 2 2 Ограничение на N поставьте сами.
C. Интервалы Петя совершил хакерский налет на сервер компании Macrohard, в результате чего ему достался объектный файл, в котором содержится скомпилированный код некоторой функции secret. Эта функция берет в качестве параметра целое число и возвращает 0 либо 1. Петя решил исследовать эту функцию и выяснить, что она делает. С этой целью он хочет вызвать ее для всех чисел от 1 до 106 и те значения параметра, на которых функция выдает 1 вывести на экран. Однако, поскольку количество различных чисел, которые придется вывести на экран может оказаться очень велико, то Петя хочет выводить их в виде интервалов подряд идущих чисел, причем если интервал имеет длину 1, то выводить только одно число. Например, вместо 1,3,4,5,6,7,8,10,12,20,21,22,23,24,… Петя хочет выводить 1,3-8,10,12,20-24,… Напишите программу, которая выведет значения параметра, на которых функция выдает 1, в нужном формате. Считайте, что Ваш язык программирования дополнен функцией secret: function secret(x: longint): integer; int secret(long int x); function secret(x as long) as integer Помните, что компьютер, на котором Петя запустит свою программу довольно слабый, и у него мало оперативной памяти, поэтому хранить все значения, на которых функция вернет 1 в памяти даже в виде интервалов может оказаться невозможным.
D. Наименьшее кратное подмножество Задано множество из N натуральных чисел: . Требуется найти такое минимальное положительное M, чтобы можно было выбрать M чисел из заданного множества так, чтобы их сумма делилась на N. Например, для множества из пяти элементов 1 3 1 7 1 M=2, т.к. можно выбрать 2 числа (3 и 7), сумма которых 3+7=10 делится на N=5, а одно число кратное 5 выбрать нельзя. Задано число N1000 и числа . Найти соответствующее минимальное положительное M, либо выяснить, что такого M не существует, т.е. нельзя выбрать из заданного множества несколько чисел, чтобы их сумма делилась на N.
E. K двоичных единиц Найдите количество чисел Z, удовлетворяющих неравенству , таких, что в записи двоичного разложения Z используется ровно единиц. ( , ) Например, если A=10; B=20; K=2, то таких чисел 5 (это числа 10=10102; 12=11002; 17=100012; 18=100102; 20=101002). Помните, что перебор всех чисел неэффективен, так как при данных ограничениях занимает слишком много времени.
F. Частотный анализ Дан текст, в котором встречаются слова, состоящие из букв русского и латинского алфавитов и цифр, знаки препинания, пробелы и переводы строк. Требуется найти количество вхождений каждого слова в этот текст и вывести слова отсортированными по невозрастанию этого количества. Для каждого слова при выводе в скобках указать количество его вхождений в текст. Например, для текста один, два - это 2, три один два, много слов один надо вывести один(3) два(2) это(1) 2(1) три(1) много(1) слов(1) Слова, которые встречаются в тексте одинаковое количество раз, должны быть выведены в том порядке, в котором они впервые встречаются в тексте.
1. Написать программу, которая будет находить в последовательности целых числ все ее симметрические участки максимальной длинны.
Условия: Программа должна ввести с клавиатуры сначала число N - количество элементов в последовательности. Далее, в одну строчку через пробел N целых чисел - значения элементов.
Программа должна показать на экране в первой строчке длинну найденых цепочек, в второй их количество, далее, в какой последовательности расположены первое и последнее числа цепочки.
Вход: 10 21 1 2 2 1 3 4 5 5 4
выход: 4 2 2 5 7 10
2. Район Глупхеттен имеет форму точного квадрата ы разделенный улицами на квадратные кварталы. Улиц каждого вида есть 2N+1 (з координатами от (-N) до N). Глупхеттенцы любят проводить гонки по квадратной спирали. Старт гонок всегда размещают в центре с коорданатами (0;0), траса идет сначала 1 квартал на север, потом 1 квартал на восток, два квартала на юг и т.д. Нужно написать программу, которая решит такую задачу: два перекрестка заданые своими (х,у)-координатами, нужно найти длинну пути между этими перекрестками в доль гоной трассы.
Программа должна прочитать входные данные с текстового файла, который имеет в первой строчке число N, которое задает размеры Глупхеттена, а во втором и в третьем - по паре целых чисел, что задают координаты перекрестков. Нужно ввести в другой текстовый файл единственную строчку - найденную длиннупути между перекрестками.
Вход: 5 2 1 3 1
Выход: 19
James Montegry
28.01.2008 1:14
Центральный сад страны Олимпия настолько большой, что один садовник не в силах его обслуживать. Было принято решение разделить сад на две части. Определенные деревья будут отнесены к первой части, а оставшиеся – ко второй. Одна из частей сада может остаться пустой. Между каждой парой деревьев в саду протоптаны тропинки. Когда садовники идут от дерева к дереву, они обязательно идут по тропинке соединяющей непосредственно эти два дерева. Длина тропинки одинакова при перемещении в обе стороны. Для упрощения работы садовников, разделение решили проводить так, чтобы длина самой длинной тропинки между парой деревьев, принадлежащих одной и той же части, была минимальна. Задание Напишите программу TREES, которая по информации о длинах тропинок между всеми парами деревьев находит длину самой длинной тропинки между деревьями из одной части сада, при оптимальном разделении сада на части. Входные данные Первая строка входного файла TREES.DAT содержит целое число N (2≤N≤1000) – количество деревьев в саду. Каждая i-ая из последующих N-1-ой строк содержит N-i чисел, которые последовательно представляют длины тропинок между i-ым деревом и деревьями с i+1-го до N-го. Все числа целые, неотрицательные, и не превышают 106. Выходные данные Единственная строка выходного файла TREES.SOL должна содержать одно целое число – минимальную для всех возможных разбиений сада длину самой длинной тропинки между деревьями в одной из частей сада.
Пример входных и выходных данных
TREES.DAT 3 1 5 1
TREES.SOL 1
Поможет кто-нить решить эту задачу?
Mazer
13.02.2008 0:18
Здравствуйте. Помогите пожалуйста решить такую вот задачу: При посадке на поверхность планеты Колонния, представляющей собой бесконечную плоскость с введенной на ней декартовой системой координат, десантник Шагаев оказался в точке (xd,yd). Вообще-то, ему хотелось бы оказаться в точке (xb,yb), где расположена база, поэтому он направился туда кратчайшим путем. Дело осложняется тем, что на поверхности планеты от прежней цивилизации остались N колонн прямоугольного сечения со сторонами, параллельными осям координат (которые, собственно, и вводились из этих соображений). Известны координаты двух противоположных вершин каждой из колонн: (xi1,yi1) и (xi2,yi2). Известно, что прямоугольники колонн имеют ненулевую площадь и что у каждой пары разных колонн нет общих точек. Конечно, Шагаев не может проходить сквозь колонны, но может двигаться вплотную к их вертикальным стенам. Начальная и конечная точка маршрута находятся вне этих колонн. Какое наименьшее расстояние должен пройти десантник, чтобы достигнуть цели? Формат ввода: первая строка входного файла содержит числа xd, yd, xb, yb - координаты десантника и базы. Вторая строка содержит число n - кол-во колонн(0=<n=<40). Следующие n строк содержат описания колонн: в строке с номером i+2 содержаться координаты xi1, yi1,xi2, yi2. Все координаты являются целыми числами, по модулю не превосходящими 10000. Числа в строках разделяются пробелами. Формат вывода: В первой строке выходного файла должно содержаться единственное вещественное число - длина кратчайшего пути с точностью до трех знаков после запятой. Пример1: input.txt output.txt 1 0 2 0 1.00000 0
Вся моя проблема в том, что я не понимаю как не проверять те ветки, в которые Шагаев идти не может(если стоит две колонны, то при обычном переборе от начальной точки до угла второй колонны потянется ребро, что невозможно, т.к. Шагаев не может идти сквозь первую колонну). Вообще нужно написать консольное приложение на Delphi 7, но мне важен только тот момент, где через графы ищется мин. путь.
Всем заранее спасибо, надеюсь на вашу помощь.
Xorian
6.05.2008 20:42
Цитата(Lodar' @ 15.12.2007 20:46)
Подсчитать число двоичных N-значных натуральных чисел (N<36). в каждом из которых нет трех единиц идущих подряд, а незначащие нули в записи чисел отсутствуют. Ваша программа должна запросить значение N; найти и сообщить число N-значных двоичных чисел без трех единиц подряд. Пример: Исходные данные: 4 Ответ: 6 (Имеются в виду числа 1000, 1001,1010, 1011, 1100, 1101)
Это задача на тему динамического программирования. Суть решения писать не буду, а код собственно вот:
var a: array [1..35] of longint; n, i: longint; begin readln (n); a[1]:=1; a[2]:=2; a[3]:=3; for i:=4 to n do a[i]:=a[i-3]+a[i-2]+a[i-1]; writeln (a[n]); end.
АНГЕЛ
17.11.2008 13:17
Пятый Белорецкий турнир по информатике Покажите решение, пожалуйста A. Почта На станцию Белорецк прибыл почтовый поезд с письмами желающих участвовать в Белорецком турнире. Из достоверных источников начальник станции узнал, что в одном из вагонов во все конверты вложено по одному грамму суперзаразных микробов. К счастью, перед въездом на станцию из каждого вагона было взято некоторое число писем, и вся пачка взвешена на сверхточных весах. Выясните, можно ли по этим данным узнать, в каком вагоне находятся зараженные письма. Входные данные: В первой строке количество вагонов и масса выбранных писем, во второй – для каждого вагона по порядку указано количество выбранных из него писем. Выходные данные: Порядковый номер вагона с зараженными письмами или слово "IMPOSSIBLE", если выявить такой вагон невозможно. Пример входных данных: 5 122 1 2 0 4 5 Пример выходных данных: 2 Технические ограничения: Любое чистое письмо весит 10 грамм, состав поезда не превышает 50 вагонов, в вагоне помещается не более 1000000 писем.
B. Контрольная. Учитель провел контрольную работу. Ученики сидели за одним длинным столом. После контрольной ученики выходили из-за стола по одному, каждый раз выходил один из сидящих с краю, подходил к столу учителя и клал свою тетрадь сверху стопки или подсовывал ее вниз. Выясните, сколькими различными способами при этом могло получиться, что тетради легли в алфавитном порядке фамилий их владельцев. Входные данные: В первой строке количество учеников, в следующих строках – их фамилии в порядке следования за столом. Выходные данные: Найденное количество способов. Пример входных данных: 3 ИВАНОВ СИДОРОВ ПЕТРОВ Пример выходных данных: 3 Технические ограничения: В классе не более 50 российских учеников, среди которых нет однофамильцев. Примечание: Способы считаются различными, если они различаются порядком складывания тетрадей (кто именно клал тетрадь i-м по счету).
C. Пары. В клуб «Кому до 100» собрались одинаковое количество мужчин и женщин. Надо подобрать пару каждому мужчине так, чтобы сумма разниц в росте мужчины и женщины в паре была наименьшей. Вместимость клуба – 100 человек. Входные данные: В первой строке количество людей, во второй – список ростов мужчин, в третьей – список ростов женщин. Каждый рост не более 255 целых сантиметров. Выходные данные: Наименьшая сумма разниц в росте. Пример входных данных: 6 180 150 205 150 180 100 Пример выходных данных: 105
D. Хакер. Хакер Вася сконструировал аппарат, который может перепрограммировать телефонные пластиковые карточки, изменяя количество оставшихся минут разговора. Помогите Васе выяснить, какую наибольшую сумму времени разговора он может получить из имеющихся у него карточек. Входные данные: В первой строке список чисел (время в целых минутах) в порядке возрастания, которые аппарат может изменить, во второй строке – список чисел, в которые преобразуется соответствующее время из первой строки, в третьей – список минут разговора на имеющихся у Васи карточках. Выходные данные: Наибольшая сумма времени разговора. Пример входных данных: 1 2 5 2 3 1 2 5 Пример выходных данных: 8 Технические ограничения: Емкость любой карточки – не более часа, для проведения испытаний аппарата Вася смог достать не более 100 карточек.
E. Телепортация. Знайка изобрел космический корабль новейшего типа, который может только телепортироваться. Одна телепортация занимает 1 минуту и перемещает корабль ровно на P парсеков. Теперь коротышки во главе со Знайкой собираются слетать до Альфы Центавра, до которой R парсеков. Помогите Знайке рассчитать наименьшее время, за которое они смогут добраться до цели. Входные данные: В одной строке – натуральные числа P и R, не превосходящие 10000. Выходные данные: Наименьшее время в минутах. Пример входных данных: 3 5 Пример выходных данных: 2
Lapp
28.12.2008 12:43
Игра с калькулятором
В калькулятор вводится натуральное число К и нажимается клавиша "+". Калькулятор все еще показывает К. Цель игры: получить на экране число, состоящее из одинаковых цифр. Для ее достижения можно производить только одно действие - нажимать на клавишу "=" (возможно, 0 раз). После первого нажатия получается результат К+К, после очередного нажатия результат увеличивается на К. Требуется определить, удастся ли достичь цели, а если удастся, то какое число, состоящее из одинаковых цифр, будет получено первым. Количество отображаемых калькулятором цифр считать неограниченным, время работы батареек - тоже. Ограничения: 1<=K<=999, время 1с. Вводится одно число - К. Вывести если цели достичь невозможно "No", если возможно, вывести два числа через пробел: цифру, из которой состоит искомое число, и количество цифр в числе.
Пример. ввод№1 37 вывод№1 1 3
ввод№2 25 вывод No
Решение: основано на алгоритме деления 'уголком'(Показать/Скрыть)
var i,j,k,m,n,a: integer; c,d: byte; r: array[1..999]of boolean;
begin ReadLn(k); c:=0; m:=MaxInt; for d:=1 to 9 do begin for j:=1 to k do r[j]:=false; a:=d; n:=1; repeat r[a]:=true; while a<k do begin a:=a*10+d; Inc(n) end; while a>=k do a:=a-k until (a=0) or r[a]; if a=0 then if n<m then begin c:=d; m:=n end end; if c=0 then WriteLn('No') else WriteLn(c,' ',m) end.
Решение №2 by klem4(Показать/Скрыть)
function solve(const k: integer): longint; var i, count: byte; n, value: longint; found: boolean; begin found := false; i := 1; while not (found) and ( i < 10 ) do begin n := 10; value := i; count := 1; while not(found) and (n <= 1000000) do begin inc(count); inc(value, i * n); found := value mod k = 0; if not found then n := n * 10; end; if not found then inc(i); end; if found and ( value <> k ) then writeln(i, ',', count) else writeln('no'); end;
var k, v: longint;
begin {* for k := 1 to 999 do *} k := 123; solve(k); end.
Witaliy
25.02.2009 20:21
Задание Однажды Петрику поручили проверить надежность военного гарнизона. А именно надежность его инфраструктуры. Инфраструктура гарнизона - это система дорог, которые соединяют тайные объекты. Надежность гарнизона - это минимальное количество взрывчатки, необходимое для того, чтобы взорвав некоторые дороги, существовали два тайных объекта таких, что невозможно было бы добраться с одного объекта до другого используя только дороги. Входные данные Вам задана структура гарнизона - в первой строке N,m - к-сть тайных объектов и количество дорог соответственно, в следующих M строках описания дорог в виде f l c - объекты, которые соединяет дорога и количество взрывчатки, которая необходима для ее уничтожения, это количество взрывчатки для одной дороги не будет превышать 1000. Все дороги двусторонние. Количество объектов не превышает 50, а количество дорог 10000. В гарнизоне ни одна дорога не соединяет секретный объект сам с собой. Выходные даны Вам нужно вывести надежность данного гарнизона. Пример введения 1
3 3
1 2 1
2 3 2
1 3 1
Пример выведения 1
2
Как я понял, задачу надо решать на графах, но какой алгоритм использовать я не знаю.. подскажите. Спасибо.
passat
17.03.2009 22:39
Вот тут много задач на любой вкус.
<ссылка удалена>
Приветствуются все решения.
Lapp
18.03.2009 8:27
Цитата(passat @ 17.03.2009 18:39)
Вот тут много задач на любой вкус.
1. В этой теме публикуются задачи в явном виде и их решения. 2. Формат .doc запрещен, см. Правила.
Если хочешь обсудить эти задачи - создай другую тему. Если просто хочешь показать ссылку - пость в раздел Ссылки (например. в тему Сайты с олимпиадными задачами )
ZeroQ
13.04.2009 23:32
"Проще простого"
Имеется натуральное число N. Выяснить, на какое наименьшее количество непересекающихся групп можно разбить числа от 1 до N так, чтобы сумма чисел в каждой из групп была простым числом.
Вход:файл input.txt, в котором записано единственное число N Ограничения: 1<N≤30000 Выход: файл output.txt, содержащий единственное число (минимальное количество групп) Пример: input.txt 18 output.txt 3
Примечание к примеру: числа от 1 до 18 можно разбить на три группы с нужным свойством (например, 1+3+4+5+6+18, 2+7+8+9+10+11+12+13+14+17 и 15+16 с суммами 103, 37 и 31), на меньшее число групп, как легко показать, нельзя.
Добавлено через 6 мин. "Острова" В океане расположен архипелаг из N островов, каждый из которых имеет форму выпуклого многоугольника. Острова не соприкасаются и не пересекаются. Эти острова необходимо соединить между собой мостами так, чтобы от любого острова архипелага можно было добраться до любого другого. Каждый мост должен соединять пару островов, при этом суммарная длина мостов должна быть минимальной.
Вход: файл input.txt, имеющий следующую структуру: в первой строке входного файла записано число N – количество островов в архипелаге. Далее идет N строк с описанием островов. В каждой строке описывается один остров, который задаётся числом вершин (первое число строки) и далее их координатами в порядке обхода по часовой стрелке (у каждой вершины первой идет абсцисса, а второй - ордината). Координаты внутри строки разделяются пробелами. Ограничения: число N – натуральное от 2 до 50 (включительно), для каждого острова число вершин не превосходит 20, все координаты – целые числа, не превосходящие по модулю 30000. Выход: файл output.txt, содержащий два числа (по одному в строке), первая строка ¬- число: количество мостов; второе строка - число: суммарная длина мостов с точностью до 0.001
Здравствуйте, у меня есть любопытная задача без решения. На первый взгляд кажется довольно легкой, но это только маскировка) Итак, задача про Боулинг. Выполняется только в Паскале. Цель при игре в боулинг - сбить шаром максимальное количество кеглей. Партия в этой игре состоит из 10 туров. Задача игрока - сбить все 10 кеглей в каждом туре. Для этого игрок может совершить 2 броска шара, за исключением: - если 10 кеглей сбиты первым броском, то второй бросок не совершается; - если 10 кеглей сбиты первым броском в десятом туре, то игроку предоставляются два призовых броска, а если двумя бросками - один. Количество очков в каждом туре равно количеству сбитых кеглей, кроме двух бросков, называемых "Strike" и "Spire". Strike: игрок сбивает 10 кеглей первым броском, очки в этом туре начисляются из расчета: 10 + сумма очков за два предыдущих броска. Spire: игрок сбивает 10 кеглей двумя бросками, очки в этом туре начисляются из расчета: 10 + сумма очков за один последующий бросок. Результат партии складывается из результатов всех 10 туров. Требуется написать программу, которая определит количество набранных игроком очков.
Входные данные
Входной файл INPUT.TXT содержит в первой строке одно натуральное число, определяющее кол-во совершенных бросков. Вторая строка содержит натуральные числа(разделенные пробелом), обозначающие количество сбитых кеглей за каждый совершенный бросок.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать одно целое число - количество набранных игроком очков.
Личное мнение: я очень хочу решить эту задачу, но испытываю некоторые трудности, вы можете мне помочь с решением?
Lapp
5.12.2009 1:43
Лисенок, ты написала в тему, в которой не должно быть обсуждений (читай самый первый пост в ней). Пожалуйста, создай отдельную тему (содержание этого поста можешь скопировать) - там все обсудим и сделаем тип-топ. Ладно? Давай.
DarkWishmaster
31.03.2011 1:30
Сообщество роботов: Сообщество роботов живет по следующим законам: один раз в год они объединяются в полностью укомплектованные группы по 3 или 5 роботов, причем число групп из 3 роботов - максимально возможное. За год группа из 3 роботов собирает 5 новых собратьев, а группа из 5 - 9 новых собратьев. Каждый робот живет 3 года после сборки. Известно начальное количество роботов K (К>7), все они только что собраны. Определить сколько роботов будет через N лет.
Input: Числа К и N (N,K≤32767) вводятся с клавиатуры. Output: На экране выводится количество роботов через N лет. Пример: Input: 11 2 Output: 80
Решение(Показать/Скрыть)
Program Robot_Society; Uses CRT; Var A:Array[1..3] Of Longint; //в векторе храним число роботов возрастов 1, 2 и 3. N,K,I:Integer; X,Y,Rb,Nt:Longint; // X- группы по 3, Y- группы по 5 Begin ClrScr; Write('nr robots=');ReadLn(K); Write('nr years=');ReadLn(N); A[1]:=K; A[2]:=0; A[3]:=0; Nt:=K; For I:=1 To N Do Begin X:=0; Y:=0; Rb:=Nt; //Nt будет нашим результатом While (Rb mod 3<>0) And (Rb>0) Do Begin Y:=Y+1; Rb:=Rb-5 End; // делаем групы по 3 и 5 If Rb>0 Then X:=Rb div 3; A[3]:=A[2]; A[2]:=A[1]; A[1]:=5*X+9*Y; Nt:=A[1]+A[2]+A[3] End; WriteLn('nr total=', Nt); ReadKey; End.
Добавлено через 5 мин. Максимальная прибыль. Для ускорения работы столовой, директор купил апарат, который успевает готовить любое меню за 1 час с минимальными затратами. Столовая работает «nonstop» и принимает очень много заказов. Для каждого заказа существует лимит до которого нужно успеть приготовить заказ. Один заказ соответствует одному меню, а в столовой существует только один аппарат, который может приготовить за 1 час одно меню, поэтому помогите директору получить максимальную прибыль, используя аппарат для приготовления тех заказов, стоимость которых (прибыль) больше.
Input: Входной файл CANTINA.IN содержит в первой строке натуральное число n – которое соответствует числу заказов полученных за 1 день, а на следующих n строках – пары 2 чисел (час стоимость), разделенные пробелом, где: час это максимальное время до которого нужно успеть приготовить заказ, а стоимость это значимость этого заказа.
Output: На экран выводится натуральное число, что соответствует максимальной прибыли, которую можно получить при помощи купленного аппарата. Пример: CANTINA.IN 7 2 100 7 220 15 300 10 125 2 400 1 350 2 400 Ответ=1445
Решение(Показать/Скрыть)
Program Cantina; Uses CRT; Type Meniu=Record Hour:1..24; Val:100..500 End; T=Array[1..100] Of Meniu; Lin=Array[1..24] Of Meniu; Var A:T; B:Lin; F:Text; N,I:Byte; S:Longint; Procedure Writing; Begin Assign(F,'cantina.in'); Reset(F); ReadLn(F,N); For I:=1 To N Do ReadLn(F,A[I].Hour,A[I].Val); Close(F) End; Procedure Sort; Var V:Boolean; C:Meniu; Begin V:=True; While V Do Begin V:=False; For I:=1 To N-1 Do If (A[I].Val<A[I+1].Val) Or (A[I].Val=A[I+1].Val) And (A[I].Hour>A[I+1].Ora) Then Begin C:=A[I]; A[I]:=A[I+1]; A[I+1]:=C;V:=True End End End; Procedure Print; Var L:Byte; Begin B[A[1].Hour]:=A[1]; S:=A[1].Val; For I:=2 To N Do Begin L:=A[I].Hour; While (L>=1) And (B[L].Hour>0) Do Dec(L); If L>=1 Then Begin B[L]:=A[I]; S:=S+A[I].Val End End; WriteLn(S) End; Begin ClrScr; Writing; Sort; Print; ReadKey End.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.