2 / 2 / 0
Регистрация: 22.01.2012
Сообщений: 6
|
|
Олимпиадные задачи :/22.01.2012, 16:39. Показов 16600. Ответов 23
Метки нет Все метки)
(
Здравствуйте!
Недавно прошёл очередной тур олимпиады по программированию и мне стало интересно, как следовало решать задачи (авторских решений или тестов для ввода-вывода выложено не было). №1 Среди всех комбинация из N цифр найти те, сумма которых равно числу K. Формат входных данных: Вводятся два целых числа через пробел – количество цифр N (1 ≤ N ≤ 100) в номере и сумма его цифр K (0 ≤ S ≤ 9•N). Формат выходных данных: Вывести количество номеров, состоящих ровно из N цифр, сумма цифр в которых равна заданному K. Пример входных - выходных данных: input: 2 7 output: 8 №2 Учитель информатики Олег Петрович задумал натуральное составное число, нашел все его делители, исключая само число, и сообщил ученикам сумму двух наибольших из этих делителей. Напишите программу, которая по значению суммы найдет число, задуманное Олегом Петровичем. Формат входных данных (input.txt) В первой строке входного файла содержится одно целое число S (3 ≤ S ≤ 1000) – сумма делителей. Формат результата (output.txt) В выходной файл вывести в порядке возрастания по одному числу на строке все числа, у которых сумма двух наибольших делителей, исключая само число, равна заданному S. Пример входных данных 12 Пример результата 16 27 35 121 №3 В центре городского парка, имеющего форму круга радиусом R2, находится круглый фонтан радиусом R1. Деревья в парке растут в узлах координатной сетки, начало которой находится в центре фонтана. Шаг координатной сетки равен 1. На границах парка и фонтана деревья не растут. Подсчитайте количество деревьев в парке. Формат входных данных (input.txt) Вводятся два целых числа R1 и R2 через пробел (1 ≤ R1 < R2 ≤ 10000). Формат результата (output.txt) Вывести количество деревьев. Пример входных данных 1 3 Пример результата 20
1
|
22.01.2012, 16:39 | |
Ответы с готовыми решениями:
23
Олимпиадные задачи Олимпиадные задачи
|
![]() 222 / 135 / 19
Регистрация: 06.11.2010
Сообщений: 234
|
||||||
22.01.2012, 17:01 | ||||||
3я решается перебором х/у для Р2 и Р1, результат: Р2 - Р1.
Рассмотрим все х, которые лежат в диапазоне [ 0; R ]. Для каждого х найде соответсвующий у, который является максимальным, при этом находящимся в круге, этот игрик есть число точек в круге для выбранного х ( точнее не в круге, а в 1/4 круга - если нарисовать на листочке, то станет ясно почему ). Найдём количество у для Р2 ( все точки для заданого х от центра парка до его границы ), а также количесвто у для Р1 ( все точки для х от центра фонтана до границы фонтана ), прибавим разницу к результату. + еще проверяем, есть ли точка на границе, если так, то просто инкрементируем у. В конце умножим результат на 4, потому что мы нашли число деревьев (точек) только в 1,4 круга. Примерно так:
1
|
32 / 32 / 2
Регистрация: 07.08.2011
Сообщений: 89
|
||||||
22.01.2012, 18:01 | ||||||
Первая задача:
переформулируем. Дан массив A из N элементов, изначально 0, не могут превышать 9 Дано число K Надо найти число комбинаций распределения K вещей по N местам. Решение: пусть есть функция, которая распределяет T элементов по всем массивам начиная с номера U. запускаем цикл. Начало рекурсии: U=0,T=K функция F(T,U): Для каждого A[U] 0<=i<=min(9,T) делаем F(T-i,U+1); Считаем сумму всех F(T-i,U+1) которые мы запускали и возвращаем. Каждый запуск функции при Т=0 - это один из вариантов. Значит возвращаем 1 ничего не запуская. Конец рекурсии. Если после последнего цикла T(T,N) - возвращаем 0 при T>9. Иначе 1. Второй конец рекурсии. Написать на С++ не проблема по этому алгоритму. Кому не лень. Edit: опечатки. Добавлено через 21 минуту По сути в прошлом A[U] нужен только для виду. в программе его не будет. Вторая задача: Дан К - сумма двух наибольших делителей. Переформулируем: перебрать все варианты разложения К вещей по двум полкам A[0] и A[1], так чтобы A[0]*A[1]%B >0 для любого B больше A[0] или A[1] и меньшего K A[0]+A[1]==K Т.е. банально три вложенных цикла, которые ищут два числа, удовлетворяющие этим условиям. Плюс третий вложенный в них цикл по поиску B, которое бы удовлетворяло A[0]*A[1]%B==0. Ответом будет их сумма. Это если писать на скорость. Даже распишу:
З.Ы. можно сделать циклы A0 и A1 >1 т.к. если одно из них равно 1, то строка 12 всегда сработает. Можно еще 14й строкой вставить else break; Увеличит производительность, но для олимпиадных оно не требуется вроде?
2
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
22.01.2012, 19:59 | |
наоборот, один из самый важный факторов 8) там же везде ограничения на время и память.
Добавлено через 2 минуты Teravisor, во второй задачи вы намудрили, как минимум из за того, что ответов может быть несколько.
0
|
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
|
|
23.01.2012, 00:33 | |
Имхо, все намного проще насчет первой задачи. Первое условие вам дает количество возможных перестановок цифр в числе, то есть в указанном вами примере это будет 2! Второе условие дает количество уникальных вариантов, равное [k/2]+1, где скобки обозначают нацело.То есть опять-таки согласно вашему примеру получается так. Выписываем "уникальные" числа
0 7 1 6 2 5 3 4 Далее они начинают просто меняться местами. Получилось 4 варианта, то есть как раз [7/2]+1=4 Далее просто умножаем одно на другое и получаем наш ответ. Правда вот если количество цифр равно 1, то метод не работает=) А для трехразрядных чисел мне было лень проверять ![]()
0
|
![]() 3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
||||||
25.01.2012, 19:50 | ||||||
На самом деле очень легкая задача для олимпиадной. Делается очень просто. Вот
Добавлено через 1 минуту Все намного проще...
0
|
![]() 3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
25.01.2012, 20:13 | |
neske, а длинная арифметика??? Про нее то забыли, алгоритм решения я предложил.
0
|
![]() 3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
25.01.2012, 20:30 | |
0
|
![]() 3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
25.01.2012, 20:38 | |
Алгоритм работает для любого кол-во цифр. Данный код работает для n < 20. Но использую длинную арифметику, можно увеличить и до 100 (как в задании). Писать это за Вас я не собираюсь.
Странно, что спрашиваете. ![]()
0
|
25.01.2012, 20:38 | ||||||
Помогаю со студенческими работами здесь
20
Ошибка в книге Скиены "Олимпиадные задачи по програмированию"?! Олимпиадные задачки Универские задачи по С++. Задачи из задачника Абрамян и дополнительные Олимпиадные задачи Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
|
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
|
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
|
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
|
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
|
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
|
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
|
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
|
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели.
Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
|