Привет-привет! Мы вновь подготовили Вам подборку интересных вопросов и задачек с собеседований в ведущие IT-компании! Кстати, ответы на задачки из прошлого выпуска уже опубликованы.
Выпуски будут появляться каждую неделю — следите за обновлениями! Рубрика выходит при поддержке рекрутингового агентства Spice IT.
На этой неделе мы собрали задачи с собеседований в Нидерландскую компанию Philips.
1. Poison and Rat
2. 5 Pirates and 100 Gold Coins
1. Factorials of large numbers
2. Diameter of Binary Tree
3. Black and White
Ответы на задачи будут даны в течение следующей недели — успейте решить. Удачи!
Выпуски будут появляться каждую неделю — следите за обновлениями! Рубрика выходит при поддержке рекрутингового агентства Spice IT.
На этой неделе мы собрали задачи с собеседований в Нидерландскую компанию Philips.
Вопросы
1. Poison and Rat
There are 1000 wine bottles. One of the bottles contains poisoned wine. A rat dies after one hour of drinking the poisoned wine. How many minimum rats are needed to figure out which bottle contains poison in hour.
Перевод
Есть 1000 бутылок вина. Одна из бутылок содержит отравленное вино. Крыса умирает через час после того, как выпьет отравленное вино. Сколько минимум крыс нужно, чтобы за час выяснить, какая бутылка содержит яд.
2. 5 Pirates and 100 Gold Coins
There are 5 pirates, they must decide how to distribute 100 gold coins among them. The pirates have seniority levels, the senior-most is A, then B, then C, then D, and finally the junior-most is E.
Rules of distribution are:
- The most senior pirate proposes a distribution of coins.
- All pirates vote on whether to accept the distribution.
- If the distribution is accepted, the coins are disbursed and the game ends.
- If not, the proposer is thrown and dies, and the next most senior pirate makes a new proposal to begin the system again.
- In case of a tie vote the proposer can has the casting vote
Rules every pirates follows:
- Every pirate wants to survive
- Given survival, each pirate wants to maximize the number of gold coins he receives.
What is the maximum number of coins that pirate A might get?
Перевод
Есть 5 пиратов, они должны решить, как распределить 100 золотых монет между ними. У пиратов есть уровни старшинства, самый старший — это A, затем B, затем C, затем D, и, наконец, самый младший — это E.
Правила распределения монет таковы:
Правила, которым следуют все пираты:
Какое максимальное количество монет может получить пират А?
Правила распределения монет таковы:
- Самый старший пират предлагает разделение монет. (сколько монет получит каждый)
- Все пираты голосуют за то, чтобы принять разделение монет.
- Если разделение монет принимается, монеты выплачиваются и игра заканчивается.
- Если нет, то претендент выбрасывается и умирает, а следующий самый старший пират делает новое предложение, чтобы начать систему снова.
- В случае равенства голосов кандидат может иметь решающий голос.
Правила, которым следуют все пираты:
- Каждый пират хочет выжить.
- Учитывая выживание, каждый пират хочет максимизировать количество золотых монет, которые он получает.
Какое максимальное количество монет может получить пират А?
Задачи
1. Factorials of large numbers
Given an integer, the task is to find factorial of the number.
Input:
The first line of input contains an integer T denoting the number of test cases.
The first line of each test case is N,the number whose factorial is to be found
Output:
Print the factorial of the number in separate line.
Constraints:
1 ? T ? 100
1 ? N ? 1000
Example:
Input
3
5
10
2
Output
120
3628800
2
Перевод
Есть целое число, задача состоит в том, чтобы найти факториал этого числа.
Ввод:
Первая строка входных данных содержит целое число T, обозначающее количество тестов.
Первая строка каждого теста — N, число, факториал которого должен быть найден
Выход:
Выведите факториал числа в отдельной строке.
Ограничения:
Пример:
Ввод
Выход:
Ввод:
Первая строка входных данных содержит целое число T, обозначающее количество тестов.
Первая строка каждого теста — N, число, факториал которого должен быть найден
Выход:
Выведите факториал числа в отдельной строке.
Ограничения:
1 ? T ? 100
1 ? N ? 1000
Пример:
Ввод
3
5
10
2
Выход:
120
3628800
2
2. Diameter of Binary Tree
Given a Binary Tree, find diameter of it.
+The diameter of a tree is the number of nodes on the longest path between two leaves in the tree. The diagram below shows two trees each with diameter nine, the leaves that form the ends of a longest path are shaded (note that there is more than one path in each tree of length nine, but no path longer than nine nodes).
Input Format:
First line of input contains the number of test cases T. For each test case, there will be only a single line of input which is a string representing the tree as described below:
1. The values in the string are in the order of level order traversal of the tree where, numbers denotes node values, and a character “N” denotes NULL child.
2. For example:
For the above tree, the string will be: 1 2 3 N N 4 6 N 5 N N 7 N
Output Format:
For each testcase, in a new line, print the diameter.
Your Task:
You need to complete the function diameter() that takes node as parameter and returns the diameter.
Constraints:
1 <= T <= 100
1 <= Number of nodes <= 100
1 <= Data of a node <= 100
Example:
Input:
2
1 2 3
10 20 30 40 60
Output:
3
4
Explanation:
Testcase1: The tree is
The diameter is of 3 length.
Testcase2: The tree is
The diameter is of 4 length.
Перевод
Есть бинарное дерево, найдите его диаметр.
+ Диаметр дерева — это число узлов на самом длинном пути между двумя листьями дерева. На диаграмме ниже показаны два дерева, каждое диаметром девять, листья, образующие концы длинного пути, затенены (обратите внимание, что в каждом дереве длиной девять есть более одного пути, но нет пути длиннее девяти узлов).
Входной формат:
Первая строка ввода содержит количество тестов T. Для каждого теста будет только одна строка ввода, представляющая собой строку, представляющую дерево, как описано ниже:
1. Значения в строке находятся в порядке обхода уровня дерева, где числа обозначают значения узлов, а символ “N” обозначает нулевой дочерний элемент.
2. Например:
Для приведенного выше дерева строка будет: 1 2 3 N N 4 6 N 5 N N 7 N
Выходной формат:
Для каждого теста в новой строке выведите диаметр.
Ваша задача:
Вам нужно выполнить функцию diameter(), которая принимает node в качестве параметра и возвращает диаметр.
Ограничения:
Пример:
Ввод:
Выход:
Объяснение:
Тест 1: дерево выглядит так:
Диаметр составляет 3.
Тест 2: дерево выглядит так:
Диаметр составляет 4 длины.
+ Диаметр дерева — это число узлов на самом длинном пути между двумя листьями дерева. На диаграмме ниже показаны два дерева, каждое диаметром девять, листья, образующие концы длинного пути, затенены (обратите внимание, что в каждом дереве длиной девять есть более одного пути, но нет пути длиннее девяти узлов).
Входной формат:
Первая строка ввода содержит количество тестов T. Для каждого теста будет только одна строка ввода, представляющая собой строку, представляющую дерево, как описано ниже:
1. Значения в строке находятся в порядке обхода уровня дерева, где числа обозначают значения узлов, а символ “N” обозначает нулевой дочерний элемент.
2. Например:
Для приведенного выше дерева строка будет: 1 2 3 N N 4 6 N 5 N N 7 N
Выходной формат:
Для каждого теста в новой строке выведите диаметр.
Ваша задача:
Вам нужно выполнить функцию diameter(), которая принимает node в качестве параметра и возвращает диаметр.
Ограничения:
1 < = T <= 100
1 < = количество узлов < = 100
1 < = Данные узла <= 100
Пример:
Ввод:
2
1 2 3
10 20 30 40 60
Выход:
3
4
Объяснение:
Тест 1: дерево выглядит так:
Диаметр составляет 3.
Тест 2: дерево выглядит так:
Диаметр составляет 4 длины.
3. Black and White
How many ways are there to place a black and a white knight on an N * M chessboard such that they do not attack each other? The knights have to be placed on different squares. A knight can move two squares horizontally and one square vertically (L shaped), or two squares vertically and one square horizontally (L shaped). The knights attack each other if one can reach the other in one move.
Input:
The first line contains the number of test cases T. Each of the next T lines contains two integers N and M which is size of matrix.
Output:
For each testcase, print the required answer, i.e, number of possible ways to place knights.
Constraints:
1 <= T <= 100
1 <= N, M <= 105
Example:
Input:
3
2 2
2 3
4 5
Output:
12
26
312
Explanation:
Testcase 1: We can place a black and a white knight in 12 possible ways such that none of them attracts each other.
Перевод
Сколько существует способов поставить черного и белого коня на N * M шахматную доску так, чтобы они не нападали друг на друга? Кони должны быть размещены на разных площадях. Конь может перемещаться на два квадрата по горизонтали и один квадрат по вертикали (L-образная форма), или два квадрата по вертикали и один квадрат по горизонтали (L-образная форма). Кони атакуют друг друга, если один из них может добраться до другого за один ход.
Ввод:
Первая строка содержит количество тестов T. Каждая из следующих T строк содержит два целых числа N и M, которые являются размером доски.
Выход:
Для каждого теста выведите требуемый ответ, то есть количество возможных способов размещения рыцарей.
Ограничения:
Пример:
Ввод:
Выход:
Объяснение:
Тест 1: мы можем расположить черного и белого коней 12 возможными способами таким образом, чтобы ни один из них не мог напасть друг на друга.
Ввод:
Первая строка содержит количество тестов T. Каждая из следующих T строк содержит два целых числа N и M, которые являются размером доски.
Выход:
Для каждого теста выведите требуемый ответ, то есть количество возможных способов размещения рыцарей.
Ограничения:
1 < = T <= 100
1 <= N, M < = 105
Пример:
Ввод:
3
2 2
2 3
4 5
Выход:
12
26
312
Объяснение:
Тест 1: мы можем расположить черного и белого коней 12 возможными способами таким образом, чтобы ни один из них не мог напасть друг на друга.
Ответы на задачи будут даны в течение следующей недели — успейте решить. Удачи!
jmdorian
Если считать 100 монет на двоих (с конца), то D получит все, а E 0. Так что для E не вариант доводить до такого исхода.
Если на троих — будет С — 99, D — 0 и E — 1.
На четверых B — 99, C — 0, D — 1 и E — 0.
На пятерых A — 98, B — 0, C — 0, D — 1, E — 1. Так у A получается 3 голоса, а D и E все равно больше никак не получат. Хотя, если пираты не сильно дальновидны, лучше предложить монету C, а не D.
notvet
А почему ты думаешь, что 2 маленьких пирата согласятся на 1 монетку?
Я бы предположил 2 варианта:
1)предложить разделить условно поровну деньги между 3 пиратами(34+33+33), в расчете, что 2 следующих пирата решат, что это наиболее выгодно, или же
2)Дать 2 малым пиратам по 21 монетке, мол это уже выше чем равная доля на пятерых, забрать себе остальное- 58.
3)а ещё есть улучшенный второй вариант- дать малому пирату 1 монетку, попутно объяснив, что если они дойдут до дележки между двумя, то он даже 1 не получит:) Итого большой пират получит аж 77 монеток.
chicodemoscu
Все монеты забирает последний. :)
jmdorian
1 — пираты D и E голосуют против. Пирату B в таком случае выгоднее слить A и самому распорядиться кассой.
2 — В таком случае не самый выгодный вариант для пирата А. Ведь он может иметь больше.
3 — Исходя из этой логики и был дан ответ. Самый выгодный для всех, учитывая условия задачи.
Задача не по писхологии, задача по математике/логике.
chicodemoscu
Последний (младший) всегда может голосовать против, если не все монеты достанутся ему. Соответственно, все, кто предложит младшему не все монеты — умрут.
jmdorian
Младший при любом раскладе получает 0 либо 1. Посмотрите на случай с 2мя пиратами. Там младший не получает ничего. Соответственно ему не выгодно убивать 3го пирата.
chicodemoscu
Я за младшего (E).
A предлагает любой вариант кроме A:0, B:0, C:0, D:0, E:all. Я голосую против, A — умирает.
B предлагает любой вариант кроме B:0, C:0, D:0, E:all. Я голосую против, B — умирает.
C предлагает любой вариант кроме C:0, D:0, E:all. Я голосую против, C — умирает.
D предлагает вариант не D:0, E:all. Я голосую против, D — умирает.
Все монеты мои.
jmdorian
> В случае равенства голосов кандидат может иметь решающий голос.
В случае с 2мя пиратам предлагает старший — он кандидат. Его голос решающий. Следовательно, младший не получает ничего.
Ну и вообще у вас во всех случаях учитывается голос только младшего, что странно.
chicodemoscu
Точно, я ошибся в рассуждениях.) Получается: A:98, B:0, C:0, D:1, E:1
maladec
999 крыс
freiman
10
Mikhail_E
это если за 10 часов — 10 крыс. А по условию у вас «Час» учитывая сроки жизни крысы после яда, у вас 1 итерация теста.
Mistx
10 крыс хватит с избытком, т.к. 2^10=1024 (>1000). Надо пронумеровать бутылки и крыс, а дальше, для каждой крысы смешивать вино по определенному алгоритму так, чтобы в случае смерти — крысы бинарным кодом кодировали номер бутылки.
xi-tauw
Разрешите дополнить ответ, просто для точности.
Докажем, что 9 и меньше крыс не хватит.
Рассмотрим пространство событий. У нас есть исходная ситуация — 1000 бутылок, среди которых одна отравлена. У нас есть 9 и меньше крыс, на которых мы опробуем вино тем или иным образом. Через час у нас будет не более 512 различных ситуаций (для каждой из 9 крыс будет известно мертва она или выжила). По принципу Дирихле в таком случае у нас будет не менее двух исходных событий, которые соответствуют некоторому результату. Простым языком это означает, что вне зависимости от того, как поить крыс, при каком-то из исходов будет ситуация в которой этот исход возможен если отравлена одна из двух бутылок, что не дает нам различить ответ.
Значит 9 крыс не хватит, а пример для 10 строится тривиально бинарным кодированием.
gugala
Если вас не затруднит, приведите пример тривиального бинарного кодирования. Мне видится, 10 достаточно только для покрытия начального пула, а вот для определения конкретики «нужно больше крыс!»
xi-tauw
Пронумеруем бутылки от 1 до 1000. Для удобства сразу запишем номера бутылок в бинарном виде: 0000000001, 0000000010, 0000000011, ..., 1111101000.
Для каждой бутылки будем трактовать эту последовательность как инструкцию для того, кому из крыс давать вино из этой бутылки. Например, для бутылки номер 2 — 0000000010 — первым 8 крысам ее не даем, девятой — даем, десятой не даем.
После смерти крыс переводим их состояние в обратной последовательности. Грубо говоря, если умерли первые две и последняя крысы, значит отравленная бутылка имела номер 1100000001 — бутылка номер 301.
gugala
Благодарю за развернутый ответ. Немного перемудрил с решением))