Олимпиада по программированию
Проснулся вчера утром от звонка моего друга. Он зная меня, сказал что у нас олимпиада по программированию. На олимпиаде были в приоритете Turbo Pascal, Delphi, C++. Я немного знал Паскаль, но мой основной и относительно небольшой опыт припадает на Блиц. Естественно у них на компах его не было. А я с собой его не взял. С момента начала олимпиады я минут 30-40 времени убил на поиск/закачку/установку блица, он ска еще и сначала не включался у них на семерке. А далее пошли задачи. Их было 6. Но я их точно не помню. Опишу только 5, а то одну уже забыл. Просто может кто захочет себя проверить:
Если возникнут какие то вопросы, или вы уже слышали о таких задачах и увидели ошибку в описании задачи, обязательно пишите, все выправим. В качестве ответа можете выкладывать исходники. Если кто захочет подсмотреть, так у него появится возможность... Задача 1: Написать функцию которая будет возвращать факториал числа N. Входное число N (0<=N<=100). Задача 2: Написать функцию "Сапер". В входном файле есть 2 числа М,N и матрица расположения бомб на карте. Где М и N размерность матрицы. На выходе функция должна вывести на экран обработанную матрицу, на которой в каждой ячейке стоит цифра обозначающая количество рядом стоящих бомб. Пример: Входной файл: 4 4 .... .*.. *... ..*. Вывод на экран обработанной вашей функцией матрицы: 1110 2*10 *321 12*1 (цвет в программе значения не имеет, это толька для описания на форуме.) Внимание!!! Есть кое что, что вам стоит знать, это сэкономит ваше время, а то я сначала этого не знал. Если в условии задачи сказано что входное число 0<=N<=100 это означает, что вам не стоит беспокоится об других вариантах. Вам не следует делать проверку, на случай если входными данными будут: N="Noob", N="15.684", N="-1" или N="101". Или например если в задаче сапер во входном файле будут ошибки. Считается что входная информация изначально правильная и подходит под данные условия задачи. П.с. Попробуйте воспользоваться вашей функцией факториала и введите в качестве проверки входное число 100. Она должна вывести верный ответ... Задача 3: Называется она: "3*N+1" Нужно написать функцию. В какой входное число N (где N>0) будет постоянно обрабатываться по принципу: Если число N- парное, то делить его на два. (N=N/2) Если число N- не парное, то умножать его на три и +1 (N=N*3+1) В итоге функция должна выводить количество итераций какие прошло число N когда оно стало равно единице. Задача 4: В входном файле есть НАТУРАЛЬНОЕ число, которое может уместить в себе до 1000 цифр. Нужно написать функцию, которая в єтом огромном числе ПЕРЕСТАВИТ (а тут проблема, я точно не помню одну или больше) цифру так, что выйдет число больше за данное, но оно будет наименьшим из всех возможных больших. (скорей всего одну цифру, но я думаю, что от єтого сложность задачи не уменьшится) Задача 5: За точность не ручаюсь, я ее вообще не сделал, не знал нужной терминологии. А именно, что такое Jolly Jumpers, но я нашел в интернете похожую задачу: Последовательность п > 0 целых чисел называется jolly jumper, если абсолютные значения разностей последовательных элементов принимают все возможные значения от 1 до п - 1. К примеру, 14 2 3 это jolly jumper, потому что абсолютные разности равны 3, 2 и 1 соответственно. Определение подразумевает, что любая последовательность из одного числа - это jolly jumper. Напишите программу, которая определяет, является ли каждая из введенных последовательностей jolly jumper. Входные данные: Каждая строка входных данных содержит число п < 3000, за которым следуют п целых чисел, представляющих собой последовательность. Выходные данные: Для каждой строки входных данных выведите строку, говорящую "Jolly" или "Not jolly"... |
Ответ: Олимпиада по программированию
Это олимпиада для 5тых классов?)
|
Ответ: Олимпиада по программированию
Таких задач over9000 в интернетах.
Ещё и по каталогам разбитые |
Ответ: Олимпиада по программированию
Поссоны!
Код:
Задача 2. (30 баллов) Пример загнал меня в глубокое непонимание. Присутствовал инструктор, спросил у него - он ничего полезного не ответил. |
Ответ: Олимпиада по программированию
Путь-то по видимому один, просто фишка проходит его различными комбинациями шагов разной длины.
|
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
И да, количество способов продвижения фишки n+1 будет равно сумме предыдущих k способов. |
Ответ: Олимпиада по программированию
Цитата:
radiobutton я был б рад увидеть хотя б 1-ю задачу в твоем исполнении...:-D |
Ответ: Олимпиада по программированию
а меня больше удивило, что тебе позволили юзать блиц. о_О
|
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
Код:
Graphics3D 1024,768 |
Ответ: Олимпиада по программированию
Цитата:
Цитата:
На счет того что написать функцию факториала сложно. Цитата:
Кроме того, как бы это не было, изначально я написал именно этот вариант::-D И кроме того! Цитата:
|
Ответ: Олимпиада по программированию
что-то я не знаю о факториали, или это вообще смешно:
Цитата:
Какие Len, какие работы со стрингами в коде выше?! |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
откуда там столько кода? (лень разбирать код) |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Тебе же вроде бы сказали, что проверки на условия не нужны :)
Ну поставь ты за место for i=0 to 10 => for i=0 to 100 не беда :) все равно, откуда-то у тебя СТОЛЬКО кода. |
Ответ: Олимпиада по программированию
ну поставь. посмотри, что будет. вообще радиобатону респект, я бы так компактно не написал длинную арифметику
|
Ответ: Олимпиада по программированию
вот, сказал бы сразу, теперь понял в чем подъё.... :)
после 31 не выводит. |
Ответ: Олимпиада по программированию
ИМХО
|
Ответ: Олимпиада по программированию
Цитата:
А вообще + к HolyDel. Я действительно когда все делал, писал в 2 раза больше кода. |
Ответ: Олимпиада по программированию
Цитата:
3) Не уверен правильно ли я тебя понял, я выложу свой вариант: Код:
Function Formula(N) пс. Функция по идее должна стремится к бесконечности. Но в итоге она превращается в единицу. В качестве примера почему то руководитель ввел число 5000000. И когда вышел ответ 144 он сказал правильно... п.с.2. Я думал сделать эту функцию рекурсивной, но не рисковал тратить лишнее драгоценное время. |
Ответ: Олимпиада по программированию
Если число N нечётное, то 3*N-тоже нечётное, то (3*N+1) - чётное, поэтому можно сразу найти (3*N+1)/2, но тогда надо счётчик повторений увеличить на два
|
Ответ: Олимпиада по программированию
Тогда свою задачу предложу тут
Она по типу задачи про фишку только чуть сложнее Есть n автобусных остановок и m автобусных маршрутов каждый из которых задается начальной остановкой Si и конечно Ti Это все вводится в программу в таком порядке n m S1 T1 S2 T2 ------ Sm Tm Вася приходит на остановку №1 он может сесть в i-ый автобус на любой его остановке о от Si до Ti-1 , но выйти только на конечной. Надо вывести количество способов добраться до n-ой остановки. |
Ответ: Олимпиада по программированию
Ох, видели б вы киевскую районную (голосеевский р-н)
http://cs9505.vkontakte.ru/u8747076/-3/w_74408c57.jpg http://cs9505.vkontakte.ru/u8747076/-3/w_aa82ad4e.jpg http://cs9505.vkontakte.ru/u8747076/-3/z_5b6cbca3.jpg http://cs9505.vkontakte.ru/u8747076/-3/z_8f06195d.jpg Извиняюсь, что мне впадлу было переводить на русский, ну пусть хоть знающие мову поржут. |
Ответ: Олимпиада по программированию
Цитата:
Код:
Graphics 800,600,32,2 N=5 M=2 S1=2 T1=5 S2=1 T2=3 Ответ програмы - 8 Посчитал вручную - 8 Но все равно не уверен что правильно. Кстати запустил вариант N=10 M=15 Программа думала 104 секунды и выдала результат в 29 тысяч с копейками... Цитата:
Но в последней я даже смысл не понял :) |
Ответ: Олимпиада по программированию
|
Ответ: Олимпиада по программированию
задачи чуть ли не из класса простейших бактерий. кроме 4 задачи в шапке темы. я её недопонял.
то есть если у меня число n=1243 , то нужно переставить цифру так чтобы оно было больше n , но минимальным из всех таких ( которые больше n ) чисел , которые можно составить из этого набора цифр ???? я вас правильно понял ?? если так , то вот нетрудный алгоритм , число ...a..b.. - буква , это цифра (при перестановке только двух цифр) ищем две цифры максимально близкие к концу , чтобы b>a, и переставляем их . если несколько цифр ( число ..a..b..c..d..) переставить , то ищем a<d , ищем перестановку , этих цифр дающую чуть большее значение из всех возможных (например dbca) . расставляем на исходные позиции цифры ..d..b..c..a.. простите что не в виде кода , а в словесном алгоритме. Сейчас мне влом перегонять в код |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Идеи:
1) Круг неспроста. Пусть x,y-координаты середины кольца с радиусом R. Тогда для любой точки S=sqrt((X-Xточки)^2+(Y-Yточки)^2), модуль разности |S-R| должен быть одинаковым для всех точек-тогда мы решили задачу. 2) Если через эти четыре точки можно провести окружность, то ответ - Infinity, координаты центра окружности и радиус=0 В пункте 2 мы исключили варианты, когда все точки либо снаружи либо внутри. 3) Возможный вариант: Три точки лежат снаружи (или 3 внутри), а четвёртая - с другой стороны от дороги. Берём три точки, ищем центр проходящей через них окружности, (радиус Ra), расстояние от центра до четвёртой точки Rb, возможный вариант решения (R=(Ra+Rb)/2) смотрим для всех вариантов троек (их 4) и выбираем наименьший R 4) Последний вариант - две точки снаружи и две внутри. Пусть у нас две пары (1 и 2) и (3 и 4). проводим прямую равноудалённую от 1 и 2 (между ними), и прямую, равноудалённую от 3 и 4. Пересечение прямых - центр окружности. R=среднее арифметическое расстояний от центра до т. 1 и до т. 3 Для всех вариантов пар точек ищем наименьший R. 5) Ответ- вариант с наименьшим R из пунктов 3 и 4 если не прокатило со вторым |
Ответ: Олимпиада по программированию
Вложений: 8
Московская область, олимпиада. Ограничение по времени - 2 секунды на тест, занимать не более 256 мб оперативки.
1,2,5 задач нет потому что они простые Задача 3. Имя входного файла xml.in, выходного- xml.out. Есть xml строка типа такой: "<a><ab></ab><c></c></a>" Длина - до 1000 символов. (строчные латинские буквы, <, > и /). Один символ поменялся((( Выходной файл должен содержать корректную xml строку, которая получается путем замены одного символа на другой в исходной строке. Если вариантов ответа несколько, подойдёт любой. О самой олимпиаде: Проводилось два тура. Задачи (1-4) и (5-8), каждый тур 5 часов. Литературой пользоваться нельзя, программировать можно на паскале, делфи, си++, питоне, джаве. Какой-то парень писал на бейсике, но официально так делать нельзя. Всё очень хитро. Каждому даётся бумажка с фамилией, паролем и логином. По ним логинишься на сервере олимпиады. всё по-честному, олимпиада у всех начинается одновременно и заканчивается тоже. Пароль заранее неизвестен, условие задач тоже. Тем не менее участники олимпиады сидят в одном здании.(точнее, в двух, но разницы никакой) Доступ в интернет вроде закрыт, хотя я не проверял. Код отправляется на сервер с указанием компилятора, на сервере компилируется и выполняется, проверка заданий автоматизирована. На компе тоже есть компилятор, можно писать и тестировать, но отсылается только код. Есть пара тестовых вариантов проверки (они в примерах к задачам)- если программа на них адекватно реагирует то принимается на проверку, и где-то через день можно узнать свои результаты. задачи лень переписывать, выкладываю фотки. |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
Но я решал по-другому, (300 строчек кода набежало), получил 85 баллов из 100. Я искал символ, в котором ошибка, потом исправлял... пару нехороших случаев исправлять не научился, но тем не менее заработал много баллов) |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
далеко не всегда. вот например
<a></a><ab></x><x><sab> P.S. Увидел результаты. Пичаль. Провалил второй тур - во второй задаче получил бы 100 баллов а не 4 если бы не перепутал m и n в ответе, за третью получил только 18 баллов(( Знал бы решил для частного случая за десять минут и получил бы 40 баллов(((. За четвёртую 30 - знал как решить на 100, но не успел |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
<a></a><ab></x><x><sab>
<a></a><ab></x><x></ab> ой. я </x> и <x> перепутал копипастю самые сложные тесты |
Ответ: Олимпиада по программированию
Цитата:
Цитата:
--- Да ну блин... Каким образом решение 8 задачи (которая про супрефиксы) могло пройти только 6 тестов из 20, если входные данные по условию имеют одинкавую структуру - оно либо ни один не пройдёт, либо пройдёт все. 6 тестов мне пририсовали не сразу - на предварительных результатах было по нулям, это показалось мне странным, потому пошёл на апелляцию (и пририсовали уже потом, без моего присутствия). Там же я узнал, что каким-то волшебным образом в обоих турах все мои решения, кроме первой задачи у проверяющих вылетали на всех тестах, хотя у меня работали с разными инпутами (т.е. хоть часть тестов должны были пройти). Это... как объяснить? (кроме того, что я криворукий мудак =D) |
Ответ: Олимпиада по программированию
хз. В городской олимпиаде можно было прийти и посмотреть, как проверяют работу. Я этой возможностью всегда пользовался - сразу узнавал баллы и вообще на душе спокойней было. У нас на области можно посмотреть результаты работы тестирующей системы - все тесты, ввод, вывод программы, время выполнения и свой код. Сами тесты я условно разбиваю на три типа -
1)простейшие (маленькие числа, к производительности никаких требований), 2)частные и крайние случаи - (в них можно потерять баллы), 3)маньяческие тесты на быстродействие. Иногда совсем непонятно как получить максимум баллов. В 8 задаче получил 30 баллов - не успел сделать сортировку - для остальных 70 баллов нужна оптимизация |
Ответ: Олимпиада по программированию
Код:
import java.math.BigInteger; Даны два дробных числа, представленные 8-байтовым значением типа long следующим образом: старшие 4 байта - это целая часть, младшие - дробная. Т. е. это число "поделено" на 0x100000000. Реализовать сложение и вычитание просто, но попробуйте реализовать умножение, деление и вывод на экран не прибегая к другим типам данных. |
Ответ: Олимпиада по программированию
Оказывается более расширенная задача такого типа довольно часто возникает при программировании микроконтроллеров, бизнес- и математических систем: http://habrahabr.ru/blogs/programming/131171/
|
Ответ: Олимпиада по программированию
Раньше трава была зеленее олимпиады были сложнее и интереснее =)
|
Ответ: Олимпиада по программированию
Цитата:
У нас была ситуация другая: c++, c, pascal, python. Вроде был еще один чувак на VB, но я не уверен. Были несколько восьмиклассников, но в основном в первые места прошли 11 классы. Задачи интересные, но местами туповатые. Тесты отправляются на сервер (к админу локальной сети), проводилась олимпиада в ЮФУ Мехмата. Кстати уже PDF файлы появились.. |
Ответ: Олимпиада по программированию
Вложений: 1
hm? o_O
Решал подбором наугад, а есть ли нормальный алгоритм? |
Ответ: Олимпиада по программированию
Элементарно,
если человечек желает познакомится с числом превышающим общее число участников минус один то наш ответ НЕТ. Решать можно как последовательно так и поэтапно. Например: 1 - отсортировать список по убыванию 2 - проверить первую запись возможно ли это выполнить если нет, то сразу отвечаем NO и завершаемся. 3 - если всё отлично, то на этом этапе знакомим чувачка со всеми кто в списке ниже его до тех пор пока непознакомим с необходим числом учасников, или достигнем конца списка, тогда снова начинаем просматривать список с начала. 3(2) другой вариант шага 3: создаем временный список из всех элементов основного списка кроме элемента рассматриваемого заказчика знакомств. далее случайным выбором выбирает элемент из списка, знакомим, увеличиваем счетчик, удаляем из списка этот элемент. продолжаем пока непознакомим с требуемым числом. |
Ответ: Олимпиада по программированию
http://forum.boolean.name/showpost.p...0&postcount=30
Кто-нибудь знает, как решается данная задача? Данное описание довольно полезно, однако непонятно, как узнать координаты центра окружности? Не перебирать же все варианты, точность 10^-5 вряд ли это позволит. |
Ответ: Олимпиада по программированию
Цитата:
Ну выбираем три точки, смотрим не лежат ли они на одной прямой, ибо тогда провести окружность через них невозможно. Потом к любым двум линиям соединяющим точки в середине отрезка ищем уравнения прямых перпендикулярных отрезку, ищем точку пересечения этих двух прямых. Это центр окружности. Считаем расстояние от центра до любой из трех точек, это радиус. Считаем растояние от центра до 4-й точки, вычитаем из получившегося значения радиус, делим на два. Это то значение на которое нужно изменить величину радиуса окружности с найденным раньше центром. Повторяем для все возможных вариантов выбора трех точек из четырех. Так как через три точки можно провести только одну окружность то по идее в итоге будут перебраны все варианты. зы. я походу ошибся, как то слишком простая задача для олимпиады. |
Ответ: Олимпиада по программированию
есть у кого с последней олимпиады список заданий на русском?
выложите самое трудное если не трудно. |
Ответ: Олимпиада по программированию
вспомнил случай, который был на олимпиаде классе в седьмом (давнооооо).
Задача тривиальная, реализация - QBasic. Условие (дословно не помню): Реализовать перемещение точки внутри прямоугольника с размерами n x m. под любым из углов, кратным 45 градусов (задается цифрой от 0 до 7), с отскакиванием от стенки по закону угла падения/отражения Входные условия - n,m, x,y (стартовые координаты точки), стартовый угол Задачку решил быстро, точка бодро скачет в прямоугольнике. После прохождения олимпиады препод в шутку сказал оставшимся ученикам - а слабо сделать реализацию отскока точки не в прямоугольнике, а в сфере и чтобы стартовый угол можно было задать произвольно на 360 градусов? Над этой задачей бились до вечера и так и не решили. До сих пор мечтаю увидеть реализацию на QBasic. |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
На одном из телеканалов каждую неделю проводится следующая лотерея. В течение недели участники делают свои ставки. Каждая ставка заключается в назывании какого-либо M-значного числа в системе счисления с основанием K (то есть, по сути, каждый участник называет M цифр, каждая из которых лежит в диапазоне от 0 до K–1). Ведущие нули в числах допускаются.
В некоторый момент прием ставок на текущий розыгрыш завершается, и после этого ведущий в телеэфире называет выигравшее число (это также M-значное число в K-ичной системе счисления). После этого те телезрители, у кого первая цифра их числа совпала с первой цифрой числа, названного ведущим, получают выигрыш в размере A1 рублей. Те, у кого совпали первые две цифры числа — получают A2 рублей (при этом если у игрока совпала вторая цифра, но не совпала первая, он не получает ничего). Аналогично угадавшие первые три цифры получают A3 рублей. И так далее. Угадавшие все число полностью получают AM рублей. При этом если игрок угадал t первых цифр, то он получает At рублей, но не получает призы за угадывание t–1, t–2 и т.д. цифр. Если игрок не угадал первую цифру, он не получает ничего. Напишите программу, которая по известным ставкам, сделанным телезрителями, находит число, которое должна назвать телеведущая, чтобы фирма-организатор розыгрыша выплатила в качестве выигрышей минимальную сумму. Для вашего удобства ставки, сделанные игроками, уже упорядочены по неубыванию. Входные данные В первой строке входного файла INPUT.TXT задаются числа N (количество телезрителей, сделавших свои ставки, 1<=N<=100000), M (длина чисел 1<=M<=10) и K (основание системы счисления 2<=K<=10). В следующей строке записаны M чисел A1, A2, …, AM, задающих выигрыши в случае совпадения только первой, первых двух,... , всех цифр (1<=A1<=A2<=…<=AM<=100000). В каждой из следующих N строк либо в одной строке через пробел записано по одному M-значному K-ичному числу. Числа идут в порядке неубывания. Выходные данные В выходной файл OUTPUT.TXT выведите наименьшую сумму, которую придется выплатить в качестве выигрыша есть идеи? на ум приходит только обычное дерево, что вряд ли выдержит по скорости. |
Ответ: Олимпиада по программированию
Допилил таки. Оказалось, что беда была с vector, а именно с его медлительностью.
Итоговый код(как говорилось ранее, требуется самое короткое решение): Код:
#include <fstream> |
Ответ: Олимпиада по программированию
|
Ответ: Олимпиада по программированию
Слишком дорогое удовольствие, такое длинное название.
P.S. пишите "X", чтобы выиграть. |
Ответ: Олимпиада по программированию
Цитата:
|
Ответ: Олимпиада по программированию
Код:
Итоговый код(как говорилось ранее, требуется самое короткое решение) |
Ответ: Олимпиада по программированию
Там у кого код меньше по количеству букв, тот и выиграл?? это че за олимпиада? во всех которых участвовал, рейтинг по количеству задач, плюс по штрафному времени (время сдачи задачи и штрафные очки за провальные попытки) там играет роль в быстроте набора программы, но о чем я уже сказал здесь x или lld не сыграет роли. Конечно если важен размер текста программы, но я честно удивлен что так могли придумать... Важно насколько программа быстро работает (это кстати тоже во всех олимпиадах есть ограничения для каждой задачи) ну это мое мнение. раз надо было так, то беру слова назад.
|
Ответ: Олимпиада по программированию
Время тоже учитывается. Просто суть в том, что время зависит от используемого алгоритма, поэтому, в идеале, у всех с одной и той же идеей должно быть одно и то же время. Поэтому и оценивают по кол-ву символов. Если прошло лимит скорости - значит алгоритм оптимальный, а значит, победитель тот, кто смог его максимально ужать.
|
Ответ: Олимпиада по программированию
На всех тех где участвовал (а я думаю acm это почти что стандарт олимпиадного проганья) побеждает тот у кого меньше штрафное время (время сдачи задачи + штрафные попытки) и это по мне логично, чем быстрее ты додумался и написал, и как можно меньше ошибок совершил то и лучше ты значит. а не сидеть и думать как же мне еще на символ программу укоротить)
|
Часовой пояс GMT +4, время: 11:40. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot