Алгоритмы

606 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Возводить в степень можно гораздо быстрее, чем за n умножений! Для этого нужно воспользоваться следующими рекуррентными соотношениями:

\(a^n=(a^2)^{n/2}\)  при четном n
\(a^n=a \cdot a^{n-1}\)  при нечетном n.
 
Реализуйте алгоритм быстрого возведения в степень. Если вы все сделаете правильно, то сложность вашего алгоритма будет O(logn) .
 
Входные данные
Вводится вещественное число a и целое число n.
 
Выходные данные 
Выведите ответ на задачу, с точностью 6 знаков после запятой.
 
Нельзя использовать стандартное возведение в степень.
 

 

Примеры
Входные данные Выходные данные
1 2
7
128
2
1.00001
100000
2.71827

 
Кролик Клевер очень любит яблоки. Также он любит угощать яблоками своих друзей. У Кролика N друзей. Он собрал в саду K яблок и хочет их поделить поровну между своими друзьями, неделящийся остаток он оставит в корзинке. Сколько яблок достанется каждому другу и сколько яблок у него останется в корзине?
Помогите Кролику Клеверу посчитать эту информацию. Напишите для него программу.

Формат входных данных
Программа получает на вход два числа: N - количество друзей у кролика (не более 1000), K - количество яблок (не более 1000000). Каждое число записано в отдельной строке.

Формат выходных данных
Необходимо вывести в первой строке число яблок, которые достанутся каждому другу. Во второй строке - число яблок, которые останутся в корзинке.
Зная a, b, c (целые неотрицательные числа, не превосходят \(2\cdot10^9\) ). Вычислите a в степени b по модулю c  (\(a^b mod \ c\)).

Входные данные
На вход подаются три целых неотрицательных числа, разделенных одним пробелом.

Выходные данные
Выведите на экран ответ на задачу.

 

Примеры
Входные данные Выходные данные
1 2 10 1000 24
Дано число N (1<=N<=1000), а затем N натуральных чисел из диапазона от 1 до 100.
Вывести перестановку элементов массива, на которой быстрая сортировка выполнит максимальное число сравнений, при условии, что "опорным" будет элемент посередине. 

Входные данные: в первой строке задаётся число N
Во второй строке идут N чисел - элементы массива
Выходные данные: выведите требуемую перестановку элементов исходного массива

Примеры
Входные данные Выходные данные
1 5
3 10 1 20 7
3 20 7 1 10
Даны две рациональные дроби: \(a \over b\) и \(c \over d\). Сложите их и результат представьте в виде несократимой дроби \(m \over n\).
 
Входные данные 
Программа получает на вход 4 натуральных числа a, b, c, d, не превосходящих 100.
 
Выходные данные 
Программа должна вывести 2 натуральных числа m и n такие, что \({m \over n} = {a \over b}+ {c \over d}\) и дробь \(m \over n\) – несократима.
 
Примеры
Входные данные Выходные данные
1  1 3 1 2 5 6
Дано число a и простое число p. Найти такое минимальное число x, что \((a * x) \% p = 1\).


Входные данные
На вход подаются два натуральное числа ap (\(a,\ p <= 10^{18} \)).

Выходные данные
Выведите ответ на задачу.
 

 

Примеры
Входные данные Выходные данные
1 2 5 3
 
Посчитать сумму функций Эйлера вида: \(\phi(1) + \phi(p) + \phi(p^2) + ... + \phi(p^\alpha)\),  где  \(p\)  - простое число, \(\alpha\)-  натуральное число.

Входные данные
В одной строке через пробел подаются два числа \(p\) и \(\alpha\)  (\(p <=11,   \alpha  <=60 \)).

Выходные данные 
Выведите ответ на задачу.
 

 

Пример
Входные данные Выходные данные
1 2 2 4
Для приведенного ниже кода, найдите асимптотику:
#include <bits/stdc++.h>
main()
{
    std::string s;
    std::cin >> s;
    int n = s.size(), p[50003], j, i = 1;
    for (; i < n; i++)
    {
        j = p[i - 1];
        for (; j && s[i] != s[j]; j = p[j - 1]);
        p[i] = (s[i] == s[j] ? ++j : j);
    }
    std::cout << n - p[n - 1];
}

1) O(n^2)       2) O(nsqrt(n))       3) O(nlogn)        4) O(n)
Садовник посадил N деревьев в один ряд. После посадки деревьев садовнику нужно их покрасить. В его распоряжении есть краска трех цветов: белая, синяя и оранжевая. Сколько способов покраски деревьев есть у него, если никакие два соседних дерева нельзя красить в одинаковый цвет?
 
Входные данные
В единственной строке записано одно натуральное число - количество деревьев N (1 ≤ N ≤ 50).
 
Выходные данные
В единственную строку нужно вывести одно число - количество способов покраски.
 
Ввод Вывод
3 12
Пусть x – целое положительное число, а k – натуральное число от 1 до 10. Пусть s(x, k) равно сумме цифр числа x, представленного в системе счисления по основанию k.
 
Задано n чисел a1, a2, ..., an. Необходимо вычислить последовательность bi по формуле \(b_i = s(a_i, k_1) \cdot s(a_i, k_2)\). После этого отсортировать последовательность bi по неубыванию.
 
Входные данные
Первая строка содержит три целых числа: n, k1, k2 (\(1 <= n <= 1000\), \(2 <= k_1, k_2 <= 10\)). Вторая строка содержит n целых чисел: ai (\(1 <= a_i <= 10^9\)).
 
Выходные данные
В ответе выведите n чисел – bi в требуемом порядке.
 

 

Примеры
Входные данные Выходные данные
1
9 10 10
1 2 3 4 5 6 7 9 8
1 4 9 16 25 36 49 64 81
2
10 2 2
1 2 4 8 16 32 64 128 256 512
1 1 1 1 1 1 1 1 1 1
Катя решила пригласить к себе в гости n друзей. Так как ее друзья очень любят фрукты, то в качестве угощения для них она купила m одинаковых апельсинов. Она хочет разрезать каждый апельсин на одинаковое число равных долек так, чтобы их можно было распределить между гостями (сама Катя апельсины есть не будет), и всем досталось одинаковое количество долек.

Напишите программу, которая вычисляет минимальное количество долек, на которое необходимо разрезать каждый апельсин, чтобы были выполнены указанные выше условия.
 
Входные данные 
Входная строка содержит два положительных целых числа n и m (\(1 <= n, m <= 10^9\)).

Выходные данные 
Выведите ответ на задачу.
 
Примеры
Входные данные Выходные данные
1 2 5 2
2 2 4 1
Задано натуральное число n. Необходимо перевести его в k-ичную систему счисления и найти разность между произведением и суммой его цифр в этой системе счисления.
 
Например, пусть \(n = 239\), \(k = 8\). Тогда представление числа n в восьмеричной системе счисления — \(357\), а ответ на задачу равен \(3 \cdot 5 \cdot 7 ? (3 + 5 + 7) = 90\).
 
 
Входные данные
Строка содержит два натуральных числа: n и k (\(1 <= n <= 10^9\), \(2 <= k <= 10\)). Оба этих числа заданы в десятичной системе счисления.
 
Выходные данные
Выведите ответ на задачу (в десятичной системе счисления).
 

 

Примеры
Входные данные Выходные данные
1 239 8 90
2 1000000000 7 -34
Несмотря на кризис, компания Soft-Soft работает успешно. Директор компании принял решение выплатить сотрудникам премии. На следующий день был обнародован список счастливчиков. Чтобы не разглашать размер выплат, в списке напротив фамилий красовались странные цифры и даже буквы. Сотрудники быстро догадались, что размер премий записан в различных системах счисления. Но где и какая система счисления используется, сообразила только секретарша Танечка, которая вспомнила, что директор просил ее принести информацию о возрасте сотрудников. Она поняла, что директор отбрасывал десятки из числа, указывающего возраст, а к оставшимся единицам добавлял число 2. Полученное значение служило основанием для представления начисленной премии.
 
Помогите любопытной Танечке узнать размер премий в десятичной системе счисления. Известно, что размер премий не превышает 100000 рублей в десятичной системе счисления.
 
Входные данные
В первой строке  записаны два целых числа N и K – возраст и размер премии, разделенные пробелом. Возраст не превышает 100, размер премии указан в некоторой системе счисления (запись числа не содержит незначащих нулей, использует арабские цифры и заглавные английские буквы).
 
Выходные данные
Выведите одно число – размер премии в десятичной системе счисления.
 

 

Примеры
Входные данные Выходные данные
1 28 2800 2800
2 30 101 5
Из заданного набора чисел выберите одно, имеющее максимальное количество простых делителей. Например, 30 имеет три простых делителя (2, 3 и 5), а 40 – только два (2 и 5).
 
Входные данные 
Первая строка  содержит число N – количество чисел в наборе. Во второй строке теста содержится N чисел, разделенных пробелом. Все числа во входных данных целые, принимающие значения от 2 до 1024.
 
Выходные данные 
В ответе выведите число с максимальным количеством простых делителей. Если таких чисел несколько, выведите наименьшее из них.
 
Примеры
Входные данные Выходные данные
1
10
3 5 7 9 11 13 15 17 19 21
15
2
11
2 4 6 8 10 13 39 105 200 201 143
105

Возьмем четырехзначное число, в котором не все цифры одинаковы, например, 6264. Расположим цифры сначала в порядке убывания - 6642; затем, переставив их в обратном порядке, получим 2466. Вычтем последнее число из 6642. На следующем шаге с полученной разностью проделаем тоже самое. Через несколько таких действий получится число, переходящее само в себя и называемое постоянной Капрекара. Если разность получается трехзначная, надо в начале добавить ноль.

Требуется написать программу, которая находит эту постоянную и количество шагов для ее получения из заданного четырехзначного числа.


Входные данные: вводится одна строка, в которой записано четырехзначное число.

Выходные данные: выведите в первой строке постоянную Капрекара, во второй – количество шагов для ее получения.
На сколько пятерок и троек можно разложить число, чтобы количество разложений было минимально.

Входные данные
На вход подается одно натуральное число (\(7 < N < 1000\)).

Выходные данные
Выведите два целых числа через пробел: число пятерок и число троек.
 

 

Примеры
Входные данные Выходные данные
1 8 1 1
2 11 1 2
3 15  3 0
✓ 134✗ 141500лёгкаяВойти и решать
Заданы два натуральных числа в десятичной системе счисления, состоящие из единиц. В первом числе ровно N единиц, а во втором их ровно M. Требуется найти НОД этих чисел. 
 
Входные данные
В единственной строке  записаны два целых числа N и M (\(1 <= N,\ M <= 2000\)).
 
Выходные данные
Выведите ответ без ведущих нулей.
 

 

Примеры
Входные данные Выходные данные
1 1 1 1
2 1 2 1
На вход программы подается натуральное число N, а затем N целых чисел. Необходимо определить максимальную сумму смежных элементов последовательности. N не превышает 1000000, каждый элемент последовательности не превосходит по модулю 100.
 

 

Примеры
Входные данные Выходные данные
1
9
-2
1
-3
4
-1
2
1
-5
4
6
 
Пояснения: для заданной последовательности чисел (-2 1 -3 4 -1 2 1 -5 4) наибольшую сумму можно получить для смежной последовательности элементов: 4 -1 2 1.
Решение на 2 балла начисляются при прохождении программой 50% тестов, 3 балла - при прохождении программой 75% тестов.

 
На прямой расположены стойла, в которые необходимо расставить коров так, чтобы минимальное расcтояние между коровами было как можно больше.
 
Входные данные: 
- в первой строке вводятся числа N  (\(2 < N < 10001\)) – количество стойл, и K  (\(1 < K < N \)) – количество коров;
- во второй строке задаются N натуральных чисел в порядке возрастания – координаты стойл (координаты не превосходят \(10^9\)).
 
Выходные данные: выведите одно число – наибольшее возможное допустимое расстояние.
 
Примеры
Входные данные Выходные данные
1
6 3
2 5 7 11 15 20
9
Поделиться
Класснуть