Информатика · 30 заданий
Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
Задания по теме «Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность» с ответами и решениями. Практикуйся и разбирай ошибки.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, меньших 100 и при этом не кратных 5, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 20 112 92 45 17 206 программа должна вывести следующий массив: 20 112 2 45 2 206 Исходные данные объявлены так, как показано ниже на примерах для пяти языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит количество элементов массива, больших 100 и при этом не кратных 4, а затем заменяет каждый такой элемент на число, равное найденному количеству. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 141 256 92 148 511 4 программа должна вывести следующий массив: 2 256 92 148 2 4 Исходные данные объявлены так, как показано ниже на примерах для пяти языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов делится на 26. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов кратно 26. Пример входных данных: 4 2 6 13 39 Пример выходных данных для приведённого выше примера входных данных: 4 Пояснение. Из четырёх заданных чисел можно составить 6 попарных произведений: 2·6, 2·13, 2·39, 6·13, 6·39, 13·39 (результаты: 12, 26, 78, 78, 234, 507). Из них на 26 делятся 4 произведения (2·13=26; 2·39=78; 6·13=78; 6·39=234). Требуется написать эффективную по времени и по памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бóльшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- ЗаданиеСложность 2
[рис.] | Задание выполняется с использованием прилагаемых к заданию файлов. Имеется набор данных, состоящий из троек положительных целых чисел. Необходимо выбрать из каждой тройки ровно одно число так, чтобы сумма всех выбранных чисел не делилась на k = 109 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число $-$ максимально возможную сумму, соответствующую условиям задачи. Входные данные. Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество троек N (1 ≤ N ≤ 1 000 000). Каждая из следующих N строк содержит три натуральных числа, не превышающих 12 000. Пример организации исходных данных во входном файле: 6 1 3 7 5 12 6 6 9 11 5 4 8 3 5 4 1 1 1 Для указанных входных данных, в случае, если k = 5, значением искомой суммы является число 44. В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B. Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго. [рис.]
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 1*23?9, делящиеся на 2023 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на 2023. Количество строк в таблице для ответа избыточно.
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 3 (разница в индексах элементов пары должна быть 3 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 23. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (3 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 3, в которых произведение элементов кратно 23. Пример входных данных: 6 46 2 3 5 4 23 Пример выходных данных для приведённого выше примера входных данных: 5 Пояснение. Из шести заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 46·5, 46·4, 46·23, 2·4, 2·23, 3·23. Из них на 23 делятся 5 произведений. Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бόльшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 1234*54, делящиеся на 21 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие им результаты деления этих чисел на 21. Количество строк в таблице для ответа избыточно.
- Развёрнутый ответСложность 3
Опишите на русском языке или одном из языков программирования алгоритм подсчета суммы произведений последовательных пар элементов в целочисленном массиве из 30 элементов. (Это означает, что нужно сосчитать сумму произведений первого и второго, третьего и четвертого, пятого и шестого элементов, и так далее.)
- Развёрнутый ответСложность 3
Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, разность которых чётна, и в этих парах, по крайней мере, одно из чисел пары делится на 19. Порядок элементов в паре неважен. Среди всех таких пар нужно найти и вывести пару с максимальной суммой элементов. Если одинаковую максимальную сумму имеет несколько пар, можно вывести любую из них. Если подходящих пар в последовательности нет, нужно вывести два нуля. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (2 ≤ N ≤ 10 000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000. Пример входных данных: 5 38 12 57 16 57 Пример выходных данных для приведённого выше примера входных данных: 57 57 Пояснение. Из данных пяти чисел можно составить три различные пары, удовлетворяющие условию: (38, 12), (38, 16), (57, 57). Наибольшая сумма получается в паре (57, 57). Эта пара допустима, так как число 57 встречается в исходной последовательности дважды. Напишите эффективную по времени и памяти программу для решения этой задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени или только по памяти, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну или две программы решения задачи. Если Вы сдадите две программы, каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. В течение времени эксперимента (это время известно заранее) прибор каждую минуту передаёт в обсерваторию по каналу связи положительное целое число, не превышающее 1000, $-$ количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. После окончания эксперимента передаётся контрольное значение $-$ наибольшее число R, удовлетворяющее следующим условиям: 1) R $-$ произведение двух чисел, переданных в разные минуты; 2) R делится на 26. Предполагается, что удовлетворяющее условиям контрольное значение существовало в момент передачи. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены. Напишите эффективную по времени и используемой памяти программу (укажите используемую версию языка программирования, например Free Pascal 2.6.4), которая будет проверять правильность контрольного значения. Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта. Программа должна напечатать отчёт по следующей форме. Вычисленное контрольное значение: … Контроль пройден (или Контроль не пройден) Если удовлетворяющее условию контрольное значение определить невозможно, то выводится только фраза «Контроль не пройден». Перед текстом программы кратко опишите используемый Вами алгоритм решения. На вход программе в первой строке подаётся количество чисел N ≤ 100 000. В каждой из последующих N строк записано одно положительное целое число, не превышающее 1000. В последней строке записано контрольное значение. Пример входных данных: 5 52 12 39 55 23 2860 Пример выходных данных для приведённого выше примера входных данных: Вычисленное контрольное значение: 2860 Контроль пройден
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 3?5*2?7, делящиеся на 3023 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на 3023. Количество строк в таблице для ответа избыточно.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от $-$ 10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести сумму элементов массива, которые НЕ делятся на 11 (наличие хотя бы одного такого элемента гарантируется). Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 20 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 20 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 20 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 20; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. Си | Естественный язык #include <stdio.h> #define N 20 int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) scanf("%ld", &a[i]); ... return 0; } | Объявляем массив A из 20 элементов. Объявляем целочисленные переменные I, J, K. В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й. … В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
- Развёрнутый ответСложность 3
Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности, разность которых чётна, и в этих парах, по крайней мере, одно из чисел пары делится на 17. Порядок элементов в паре неважен. Среди всех таких пар нужно найти и вывести пару с максимальной суммой элементов. Если одинаковую максимальную сумму имеет несколько пар, можно вывести любую из них. Если подходящих пар в последовательности нет, нужно вывести два нуля. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (2 ≤ N ≤ 10 000). В каждой из последующих N строк записано одно натуральное число, не превышающее 10 000. Пример входных данных: 5 34 12 51 52 51 Пример выходных данных для приведённого выше примера входных данных: 51 51 Пояснение. Из данных пяти чисел можно составить три различные пары, удовлетворяющие условию: (34, 12), (34, 52), (51, 51). Наибольшая сумма получается в паре (51, 51). Эта пара допустима, так как число 51 встречается в исходной последовательности дважды. Напишите эффективную по времени и памяти программу для решения этой задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени или только по памяти, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну или две программы решения задачи. Если Вы сдадите две программы, каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от $-$ 10 000 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит максимум среди элементов массива, делящихся нацело на 5, а затем заменяет каждый элемент, делящийся нацело на 5, на число, равное найденному максимуму. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 5 7 10 25 39 15 программа должна вывести следующий массив 25 7 25 25 39 25 Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 108, найдите все числа, соответствующие маске 2*1?71, делящиеся на 1991 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце – соответствующие результаты деления этих чисел на 1991. Количество строк в таблице для ответа избыточно.
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 12345?7?8, делящиеся на число 23 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце $-$ соответствующие им результаты деления этих чисел на 23. Количество строк в таблице для ответа избыточно.
- ЗаданиеСложность 2
Пусть R – сумма различных натуральных делителей целого числа, не считая единицы и самого числа. Напишите программу, которая перебирает целые числа, бо́льшие 500 000, в порядке возрастания и ищет среди них такие, для которых R оканчивается на цифру 7. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – соответствующие им значения R. Например, для числа 20 R = 2 + 4 + 5 + 10 = 21. Количество строк в таблице для ответа избыточно.
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из n целых положительных чисел. Рассматриваются все пары элементов последовательности ai и aj, такие что i < j и ai > aj (первый элемент пары больше второго, i и j $-$ порядковые номера чисел в последовательности входных данных). Среди пар, удовлетворяющих этому условию, необходимо найти и напечатать пару с максимальной суммой элементов, которая делится на m = 107. Если среди найденных пар максимальную сумму имеют несколько, то можно напечатать любую из них. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел n (2 ≤ n ≤ 12 000). В каждой из последующих n строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать элементы искомой пары. Если таких пар несколько, можно вывести любую из них. Гарантируется, что хотя бы одна такая пара в последовательности есть. Пример входных данных: 6 60 114 61 100 261 46 Пример выходных данных для приведённого выше примера входных данных: 114 100 Пояснение. Из шести заданных чисел можно составить 3 пары, сумма элементов которых делится на 107: 60+261, 114+100, 61+46. Во второй и третьей из этих пар первый элемент больше второго, но во второй паре сумма больше. Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при одновременном увеличении количества элементов последовательности n и параметра m в k раз, время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 4 килобайта и не увеличивается с ростом n. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, возможно, неэффективную по памяти или время выполнения которой существенно зависит от величины m, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов делится на 74. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов кратно 74. Пример входных данных: 4 2 6 37 111 Пример выходных данных для приведённого выше примера входных данных: 4 Пояснение. Из четырёх заданных чисел можно составить 6 попарных произведений: 2·6, 2·37, 2·111, 6·37, 6·111, 37·111 (результаты: 12, 74, 222, 222, 666, 4107). Из них на 74 делятся 4 произведения (2·37=74; 2·111=222; 6·37=222; 6·111=666). Требуется написать эффективную по времени и по памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бóльшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от $-$ 10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива, которые НЕ делятся на 7. Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 20 DIM A (1 TO N) AS INTEGER DIM I AS INTEGER, J AS INTEGER, K AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 20 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 20 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 20; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]); ... end. Си | Естественный язык #include <stdio.h> #define N 20 int main() { int a[N]; int i, j, k; for (i = 0; i < N; i++) scanf("%d", &a[i]); ... return 0; } | Объявляем массив A из 20 элементов. Объявляем целочисленные переменные I, J, K. В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й. … В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары могут быть расположены в последовательности не рядом, порядок элементов в паре неважен). Необходимо определить количество пар, для которых произведение элементов делится без остатка на 10. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов кратно 10. Пример входных данных: 4 2 6 5 15 Пример выходных данных для приведённого выше примера входных данных: 4 Пояснение. Из четырёх заданных чисел можно составить 6 попарных произведений: 2·6, 2·5, 2·15, 6·5, 6·15, 5·15 (результаты: 12, 10, 30, 30, 90, 75). Из них на 10 без остатка делятся 4 произведения (2·5=10; 2·15=30; 6·5=30; 6·15=90). Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит сумму элементов массива, не меньших 99 и при этом не кратных 4, а затем заменяет каждый такой элемент на число, равное найденной сумме. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 101 128 6 105 4 18 программа должна вывести следующий массив: 206 128 6 206 4 18 Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- ЗаданиеСложность 2
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие маске 1234?57?8, делящиеся на число 19 без остатка. В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце $-$ соответствующие им результаты деления этих чисел на 19. Количество строк в таблице для ответа избыточно.
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из n целых положительных чисел. Рассматриваются все пары элементов последовательности ai и aj, такие что i < j и ai > aj (первый элемент пары больше второго, i и j $-$ порядковые номера чисел в последовательности входных данных). Среди пар, удовлетворяющих этому условию, необходимо найти и напечатать пару с максимальной суммой элементов, которая делится на m = 120. Если среди найденных пар максимальную сумму имеют несколько, то можно напечатать любую из них. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел n (2 ≤ n ≤ 12 000). В каждой из последующих n строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать элементы искомой пары. Если таких пар несколько, можно вывести любую из них. Гарантируется, что хотя бы одна такая пара в последовательности есть. Пример входных данных: 6 60 140 61 100 300 59 Пример выходных данных для приведённого выше примера входных данных: 140 100 Пояснение. Из шести заданных чисел можно составить 3 пары, сумма элементов которых делится на m=120: 60+300, 140+100 и 61+59. Во второй и третьей из этих пар первый элемент больше второго, но во второй паре сумма больше. Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при одновременном увеличении количества элементов последовательности n и параметра m в k раз, время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 4 килобайта и не увеличивается с ростом n. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, возможно, неэффективную по памяти или время выполнения которой существенно зависит от величины m, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать натуральные значения от 1 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит минимум среди элементов массива, не делящихся нацело на 5, а затем заменяет каждый элемент, не делящийся нацело на 5, на число, равное найденному минимуму. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 14 10 11 5 9 20 программа должна вывести следующий массив 9 10 9 5 9 20 Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- Развёрнутый ответСложность 3
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит сумму элементов массива, больших 100 и при этом не кратных 4, а затем заменяет каждый такой элемент на число, равное найденной сумме. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки. Например, для исходного массива из шести элементов: 101 128 6 105 4 18 программа должна вывести следующий массив: 206 128 6 206 4 18 Исходные данные объявлены так, как показано ниже на примерах для пяти языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. Бейсик | Python CONST N AS INTEGER = 30 DIM A (1 TO N) AS LONG DIM I AS LONG, J AS LONG, K AS LONG FOR I = 1 TO N INPUT A(I) NEXT I ... END | # допускается также # использовать две # целочисленные переменные j и k a = [] n = 30 for i in range(0, n): a.append(int(input())) ... Алгоритмический язык | Паскаль алг нач цел N = 30 целтаб a[1:N] цел i, j, k нц для i от 1 до N ввод a[i] кц ... кон | const N = 30; var a: array [1..N] of longint; i, j, k: longint; begin for i := 1 to N do readln(a[i]); ... end. C++ #include <iostream> using namespace std; const int N = 30; int main() { long a[N]; long i, j, k; for (i = 0; i < N; i++) cin >> a[i]; ... return 0; } В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).
- ЗаданиеСложность 2
[рис.] | Задание выполняется с использованием прилагаемых файлов. На каждом 3-м километре кольцевой автодороги с двусторонним движением установлены контейнеры для мусора. Длина кольцевой автодороги равна 3N километров. Нулевой километр и 3N-й километр автодороги находятся в одной точке. Известно количество мусора, которое накапливается ежедневно в каждом из контейнеров. Из каждого пункта мусор вывозит отдельный мусоровоз. Стоимость доставки мусора вычисляется как произведение количества мусора на расстояние от пункта до центра переработки. Центр переработки отходов расположен в одном из пунктов сбора мусора таким образом, что общая стоимость доставки мусора из всех пунктов минимальна. Определите минимальную суммарную стоимость доставки мусора из всех пунктов сбора в центр переработки отходов. Входные данные Дано два входных файла (файл A и файл B), каждый из которых в первой строке содержит число N (1 ≤ N ≤ 10 000 000) $-$ количество пунктов сбора мусора на кольцевой автодороге. В каждой из следующих N строк находится число $-$ количество мусора в контейнере (все числа натуральные, количество мусора в каждом пункте не превышает 1000). Числа указаны в порядке расположения контейнеров на автомагистрали, начиная с первого километра. В ответе укажите два числа: сначала значение искомой величины для файла А, затем $-$ для файла B. Типовой пример организации данных во входном файле 6 8 20 5 13 7 19 При таких исходных данных, если контейнеры установлены на каждом километре автодороги, необходимо открыть центр переработки в пункте 6. В этом случае сумма транспортных затрат составит: 1 $�$ 7 + 0 $�$ 19 + 1 $�$ 8 + 2 $�$ 20 + 3 $�$ 5 + 2 $�$ 13. Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов. Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго. [рис.]
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 5 (разница в индексах элементов пары должна быть 5 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 11. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел N (5 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 5, в которых произведение элементов кратно 11. Пример входных данных: 8 22 2 3 5 4 6 7 11 Пример выходных данных для приведённого выше примера входных данных: 5 Пояснение. Из восьми заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 22·6, 22·7, 22·11, 2·7, 2·11, 3·11. Из них на 11 делятся 5 произведений. Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 килобайта и не увеличивается с ростом N. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, эффективную только по времени, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бόльшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
- ЗаданиеСложность 2
[рис.] | Задание выполняется с использованием прилагаемых файлов. У медицинской компании есть N пунктов приёма биоматериалов на анализ. Все пункты расположены вдоль автомагистрали и имеют номера, соответствующие расстоянию от нулевой отметки до конкретного пункта. Известно количество пробирок, которое ежедневно принимают в каждом из пунктов. Компания планирует открыть лабораторию в одном из имеющихся пунктов. Перевозить биоматериалы разрешается на расстояние не более M. Пробирки перевозят в специальных транспортировочных контейнерах вместимостью не более 30 штук. Каждый транспортировочный контейнер используется для доставки пробирок только из одного пункта приёма, при этом из каждого пункта приёма может быть доставлено не более одного контейнера с неполной загрузкой. Пункт для лаборатории выбрали таким образом, чтобы количество доставляемых туда контейнеров с пробирками было максимальным. Определите необходимое количество контейнеров для доставки пробирок в эту лабораторию. Входные данные Даны два входных файла (файл A и файл B), каждый из которых в первой строке содержит два числа N и M (1 ≤ N ≤ 10 000 000, 1 ≤ M ≤ 10 000 000) $-$ количество пунктов приёма биоматериалов и максимальное расстояние, на которое разрешено перевозить биоматериалы. В каждой из следующих N строк находятся два числа: номер пункта и количество пробирок, принимаемых на этом пункте за сутки (все числа натуральные, количество пробирок в каждом пункте не превышает 1000). Пункты перечислены в порядке их расположения вдоль автомагистрали, считая от нулевой отметки. В ответе укажите два числа: сначала значение искомой величины для файла А, затем $-$ для файла B. Типовой пример организации данных во входном файле 6 3 1 100 3 200 6 4 7 3 8 2 10 195 При таких исходных данных и вместимости транспортировочного контейнера, составляющей 96 пробирок, компании выгодно открыть лабораторию в пункте 3. В этом случае количество контейнеров в ней составит: 2 + 3 + 1. Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов. Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго. [рис.]
- Развёрнутый ответСложность 3
На вход программы поступает последовательность из n целых положительных чисел. Рассматриваются все пары элементов последовательности ai и aj, такие что i < j и ai > aj (первый элемент пары больше второго, i и j $-$ порядковые номера чисел в последовательности входных данных). Среди пар, удовлетворяющих этому условию, необходимо найти и напечатать пару с максимальной суммой элементов, которая делится на m = 109. Если среди найденных пар максимальную сумму имеют несколько, то можно напечатать любую из них. Описание входных и выходных данных В первой строке входных данных задаётся количество чисел n (2 ≤ n ≤ 12 000). В каждой из последующих n строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать элементы искомой пары. Если таких пар несколько, можно вывести любую из них. Гарантируется, что хотя бы одна такая пара в последовательности есть. Пример входных данных: 6 60 118 61 100 267 48 Пример выходных данных для приведённого выше примера входных данных: 118 100 Пояснение. Из шести заданных чисел можно составить 3 пары, сумма элементов которых делится на m=109: 60+267, 118+100, 61+48. Во второй и третьей из этих пар первый элемент больше второго, но во второй паре сумма больше. Требуется написать эффективную по времени и памяти программу для решения описанной задачи. Программа считается эффективной по времени, если при одновременном увеличении количества элементов последовательности n и параметра m в k раз, время работы программы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 4 килобайта и не увеличивается с ростом n. Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и памяти, $-$ 4 балла. Максимальная оценка за правильную программу, возможно, неэффективную по памяти или время выполнения которой существенно зависит от величины m, $-$ 3 балла. Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, $-$ 2 балла. Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо $�$ ьшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.