Как стать автором
Обновить
0
Spice IT Recruitment
ИТ-специализированное кадровое агентство

Выпуск#38: ITренировка — актуальные вопросы и задачи от ведущих компаний

Время на прочтение6 мин
Количество просмотров2K
Привет! Новая неделя — новый выпуск брейнтизиров. На этот раз, с собеседований в ИТ-компанию Accolite.

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

Ну что, погнали!

Вопросы


1. Rich or Poor
A place has two kinds of residents, Poor, who always tell the truth, and their opposites, Rich, who always lie. You encounter two people A and B. What are A and B if A says “B is a Poor” and B says “The two of us are opposite types”?

Перевод
В одном из мест есть два вида жителей: бедные, которые всегда говорят правду, и богатые, которые всегда лгут. Вы сталкиваетесь с двумя людьми A и B. К какому из классов относится каждый из людей A и B, если A говорит «B — бедный», а B говорит: «Мы оба — противоположные типы»?

2. Boy with Marbles
A boy goes to 20 of his friend’s houses with ‘n’ number of newly purchased marbles in his hands. At every house he visits, he gives away half of marbles he have and take one of his friend’s marble’s and adds it with the one’s he is left with, he never had a problem of dividing an odd number of marbles left and finally after leaving the his 20th friends house, he is left with 2 marbles, can you guess the ‘n’ value?

Перевод
Мальчик идет в 20 домов своих друзей с «n» количеством недавно купленных шариков в руках. В каждом доме, который он посещает, он отдает половину шариков, которые у него есть, и берет один из шариков своего друга и добавляет его к тем, которые у него остались. У него никогда не было проблемы с разделением нечетного количества оставшихся шариков, и наконец, после того, как он покинул последний дом своих 20 друзей, у него осталось 2 шарика. Можете ли вы угадать значение «n»?

Задачи


1. Swap two nibbles in a byte
Given a byte, swap the two nibbles in it. For example 100 is be represented as 01100100 in a byte (or 8 bits). The two nibbles are (0110) and (0100). If we swap the two nibbles, we get 01000110 which is 70 in decimal.

Input:
The first line contains 'T' denoting the number of testcases. Each testcase contains a single positive integer X.

Output:
In each separate line print the result after swapping the nibbles.

Constraints:
1 ≤ T ≤ 70
1 ≤ X ≤ 255


Example:
Input:

2
100
129


Output:
70
24

Перевод
Дан байт, поменяйте местами две части в нем. Например, 100 можно представить как 01100100 в байте (или 8 битах). Две части — это (0110) и (0100). Если мы поменяем местами две части, то получим 01000110, что равно 70 в десятичной системе счисления.

Ввод:
Первая строка содержит букву «Т», обозначающую количество тестов. Каждый тест содержит одно положительное целое число X.

Вывод:
В каждой отдельной строке выведите Результат после замены частей.

Ограничения:
1 ≤ T ≤ 70
1 ≤ X ≤ 255


Пример:
Ввод:

2
100
129


Вывод:
70
24

2. Count pairs with given sum
Given an array of integers, and an integer ‘K’, find the count of pairs of elements in the array whose sum is equal to 'K'.

Input:
First line of the input contains an integer T, denoting the number of test cases. Then T test cases follow. Each test case consists of two lines. First line of each test case contains 2 space separated integers N and K denoting the size of array and the sum respectively. Second line of each test case contains N space separated integers denoting the elements of the array.

Output:
Print the count of pairs of elements in the array whose sum is equal to the K.

Constraints:
1<=T<=50
1<=N<=50
1<=K<=50
1<=A[i]<=100


Example:
Input

2
4 6
1 5 7 1
4 2
1 1 1 1

Output
2
6

Перевод
Дан массив целых чисел и целое число «K», найдите количество пар элементов в массиве, сумма которых равна «K».

Ввод:
Первая строка входных данных содержит целое число T, обозначающее количество тестов. Затем следуют T тестов. Каждый тест состоит из двух строк. Первая строка каждого теста содержит 2 целых числа N и K, разделенных пробелами, обозначающих размер массива и сумму соответственно. Вторая строка каждого теста содержит N целых чисел, разделенных пробелом, обозначающих элементы массива.

Вывод:
Выведите количество пар элементов в массиве, сумма которых равна К.

Ограничения:
1< = T< = 50
1< = N< = 50
1< = K< = 50
1<=A[i]< = 100


Пример:
Ввод

2
4 6
1 5 7 1
4 2
1 1 1 1

Вывод
2
6

3. Trie | (Insert and Search)
Trie is an efficient information retrieval data structure. Use this data structure to store Strings and search strings. Your task is to use TRIE data structure and search the given string A. If found print 1 else 0.

Input:
The first line of input contains a single integer T denoting the number of test cases. Then T test cases follow. Each test case consists of three lines.
First line of each test case consist of a integer N, denoting the number of element in a Trie to be stored.
Second line of each test case consists of N space separated strings denoting the elements to be stored in the trie.
Third line of each test case consists of a String A to be searched in the stored elements.

Output:
Print the respective output in the respective line.

Constraints:
1<=T<=20
1<=N<=20


Example:
Input:

1
8
the a there answer any by bye their
the

Output:
1

Перевод
Trie — это эффективная структура данных для поиска информации. Используйте эту структуру данных для хранения строк и поиска строк. Ваша задача состоит в том, чтобы использовать структуру данных TRIE и искать заданную строку A. Если она найдена, выведите 1, если нет — 0.

Ввод:
Первая строка входных данных содержит одно целое число T, обозначающее количество тестов. Затем следуют T тестов. Каждый тест состоит из трех строк.
Первая строка каждого теста состоит из целого числа N, обозначающего количество элементов в TRIE, которые должны быть сохранены.
Вторая строка каждого теста состоит из N строк, разделенных пробелами, обозначающих элементы, которые будут храниться в TRIE.
Третья строка каждого теста состоит из строки A, которую нужно искать в сохраненных элементах.

Вывод:
Выведите 1 или 0 в соответствующей строке.

Ограничения:
1< = T< = 20
1< = N< = 20


Пример:
Ввод:

1
8
the a there answer any by bye their
the

Вывод:
1


Ответы


Вопрос 1
Ответ: и А, и В богаты.
Решение: пусть p и q это заявления, что А является бедным и B является бедным. Соответственно, ¬p и ¬q это заявления, что А и В являются богатыми. Давайте рассмотрим возможность того, что А является бедным. Значит, заявление p — истинно. Если А беден, то он говорит правду, когда говорит, что B — беден, так что q истинно. Получается, А и В — один и тот же тип. Однако, если B — бедный, то его утверждение о том, что A и B принадлежат к противоположным типам должно быть истинным, а это не так, потому что A и B — оба бедные. Следовательно, мы можем понять, что А не является бедным, то есть что Р ложно. Если А — богатый, то все, что говорит богатый, ложно. Утверждение А о том, что В — бедный, является ложью. Это означает, что q-ложь, а B — тоже богатый. Более того, если В — богатый, то утверждение В о том, что А и В — противоположные типы, является ложью, которая согласуется с тем, что и А, и В — богаты. Мы можем утверждать, что и А, и В богаты.

Вопрос 2
Ответ: 2
Пояснение: n=2; мальчик покупает два шарика в магазине и едет в дом своего первого друга, где он отдает половину из них, что составляет n/2=2/2=1 своему первому другу, и таким образом остается с 1 шариком, и берет 1 шарик у своего первого друга и добавляет его к оставшемуся у него, поэтому теперь у него есть 2 шарика с собой.
Затем он идет в дом своего второго друга и снова отдает половину того, что у него есть, а именно — у него есть 2 шарика, отдаёт 1, остаётся 1 и он берёт 1 шарик у друга — и у него опять 2.
И точно так же он продолжает ходить по всем домам своих друзей и вернется обратно с двумя шариками.

Задача 1
#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;

int main()
{
    int t; cin>>t;
    while(t--)
    {
        int n,a,b; cin>>n;
        
        a= (n&15)<<4;
        b= (n&(~15))>>4;
        
        int res=a|b;
        
        cout<<res<<endl;
    }
    return 0;
}

Задача 2
#include <stdio.h>

int main() {
    int t,i,j,n;
    scanf("%d",&t);
    while(t--)
    { int d;
        scanf("%d %d",&n,&d);
        int a[n],count=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(i=0;i<n-1;i++)
        {
        
            for(j=i+1;j<n;j++)
            {
                if(a[i]+a[j]==d)
                count=count+1;
            }
    
        }
        printf("%d\n",count);
    }
    return 0;

}

Задача 3
очень понятное решение с комментариями, которое также имеет метод печати слов в TRIE.
#include <iostream>
#include <vector>
using namespace std;

class Node
{
    public:
    char key;
    bool isTerminating;
    Node(char ch){key=ch; isTerminating=false;}
    std::vector<Node*> children;
};
Node* Root=NULL;

void insertNode(Node* Root, string input)
{
    //first we found the node at which we need to insert if substring of the input is alreadu present we skip
    int index=-1;
    for(int i=0; i<input.size(); i++)
    {
        bool isFound=false;
        for(int j=0; j<Root->children.size(); j++)
        {
            if(!isFound && input[i]==Root->children[j]->key)
            {
                isFound=true; Root=Root->children[j]; index=i;
            }
        }
        //aslong the character is present is the trie we dont break and we skip the character 
        if(!isFound) break;

    }
    
    //after skipping the existing elements we have now reached the node at which we need to insert the string which is left
    //now we can just insert whatever is leftout and mark last node as Terminating
    for(int i=index+1; i<input.size(); i++)
    {
        Node* newNode= new Node(input[i]);
        Root->children.push_back(newNode);
        Root=newNode; Root->isTerminating=false;
    }Root->isTerminating=true;
}

bool searchString(Node* Root, string input)
{
    //searching is similar to insert we keep checking if characters are present and last character is Terminating  
    for(int i=0; i<input.size(); i++)
    {
        bool isFound=false;
        for(int j=0; j<Root->children.size(); j++)
        {
            if(!isFound && Root->children[j]->key==input[i]) 
            {
                isFound=true;
                Root=Root->children[j];
            }
        }
        if(!isFound) return false;
    }
    if(Root->isTerminating) return true;
    return false;
}

void doDFS(Node* Root, string path="")
{
    if(Root->isTerminating) cout<<"Word present is "<<path<<endl;

    for(int i=0; i<Root->children.size(); i++)
    {
        doDFS(Root->children[i], path+Root->children[i]->key);
    }
}

int main()
{

    int t, n;
    cin>>t;

    while(t--)
    {
        cin>>n;
        
        std::vector<string> array;
        string temp;
        for(int i=0; i<n; i++) {cin>>temp; array.push_back(temp);}
        cin>>temp;

        Root=new Node('-');
        Node* tempNode=Root;

        for(int i=0; i<array.size(); i++)
        {
            tempNode=Root;
            insertNode(tempNode, array[i]);
        }
        //uncomment to see the words present in the trie
        //tempNode=Root;
        //doDFS(tempNode);

        tempNode=Root;
        cout<<searchString(tempNode, temp)<<endl;
    }
}
Теги:
Хабы:
Всего голосов 8: ↑7 и ↓1+6
Комментарии2

Публикации

Информация

Сайт
www.spiceit.ru
Дата регистрации
Дата основания
2009
Численность
31–50 человек
Местоположение
Россия

Истории