Edição 26: Treinamento em TI - problemas e desafios atuais das principais empresas

Urgente no quarto! Renascimento do título Treinamento em TI. Reunimos novamente as perguntas e tarefas feitas em entrevistas em empresas de TI.

imagem

Os problemas serão exibidos toda semana - fique ligado! A coluna é suportada pela agência de recrutamento Spice IT .

Hoje, temos tarefas - de níveis muito diferentes de complexidade - de entrevistas à empresa indiana Flipkart. Bem, passaram a segurança social?

Perguntas


1. Ladrão, tesouro e 2 portas
Um ladrão acaba de encontrar um par de cavernas antigas. Uma das cavernas está cheia de tesouros inacreditáveis ​​e a outra possui um monstro que cospe fogo, que comerá quem abrir a caverna.
Uma caverna tem uma porta preta decorada com diamantes e a outra caverna tem uma porta marrom decorada com safiras.
Cada uma das portas tem uma descrição gravada na parte superior. As descrições dizem:

Black Door: Monster está aqui.
Porta marrom: apenas uma porta fala a verdade.

Qual porta o ladrão deve abrir?

Tradução
O ladrão acabou de encontrar algumas cavernas antigas. Uma das cavernas está cheia de tesouros incríveis, e a outra é um monstro que cospe fogo que come qualquer um que abrir essa caverna.
A entrada da primeira caverna é bloqueada por uma porta preta decorada com diamantes e a outra - uma porta marrom decorada com safiras.
Cada porta tem uma descrição gravada na parte superior. Descrições lidas:

Porta preta: o monstro está aqui.
Porta marrom: apenas uma porta está dizendo a verdade.

Que porta um ladrão deve abrir?

2. Encontre idades das filhas
Alok tem três filhas. Seu amigo Shyam quer saber a idade de suas filhas. Alok lhe dá a primeira dica.
  1. O produto da idade deles é de 72 anos. Shyam diz que isso não é informação suficiente. Alok lhe dá uma segunda dica.
  2. A soma das idades deles é igual ao número da minha casa. Shyam sai e olha para o número da casa e diz: "Ainda não tenho informações suficientes para determinar as idades". Alok admite que Shyam não consegue adivinhar e dá a ele a terceira dica
  3. A mais velha das meninas gosta de sorvete de morango. Shyam é capaz de adivinhar após a terceira dica.

Você consegue adivinhar quais são as idades de três filhas?

Tradução
Alok tem três filhas. Seu amigo Shiyam quer saber a idade de suas filhas. Alok dá a ele a primeira dica.
  1. O produto da idade deles é 72. Shiyam diz que essa informação não é suficiente, então Alok dá a ele uma segunda pista.
  2. A soma das idades deles é igual ao número da minha casa. Shiyam aparece, olha o número da casa e diz: "Ainda não tenho informações suficientes para determinar a idade". Alok admite que Shiyam não será capaz de adivinhar e, portanto, dá a ele uma terceira pista.
  3. A mais velha das meninas adora sorvete de morango. Somente após a terceira pista Shiyama conseguiu adivinhar a idade de suas filhas.

Você consegue adivinhar quantos anos cada uma das três filhas tem?

As tarefas


1. Tom e Jerry
Desde muito tempo, Tom e Jerry estão brigando entre si por um pedaço de queijo. Então, finalmente, você veio resgatar e decidiu que o resultado da luta será decidido por um jogo matemático, no qual você escreverá um número N (1 <= N <= 10^6) . Tom e Jerry jogarão o jogo alternativamente e cada um deles subtrairá um número n [n < N] que N % n = 0 .
O jogo é repetido turno por turno até aquele que agora não pode fazer mais um movimento perde o jogo.
O jogo começa com Tom jogando o primeiro movimento. É sabido que os dois farão movimentos da maneira ideal. Você deve determinar quem ganha o jogo.

Entrada: a primeira linha de cada caso de teste consiste em N o número.
Saída: imprima 1 se Tom vencer e imprima 0 se Jerry vencer em uma linha separada.

Restrições:
1 <= N <= 10^6

Amostra:
Entrada: 2 / Saída: 1
Entrada: 4 / Saída: 1

Tradução
Por um longo tempo, Tom e Jerry lutaram entre si por um pedaço de queijo. Você decidiu ajudá-los a determinar rapidamente o vencedor. O resultado da partida será decidido em um jogo matemático no qual você escreverá o número N (1 <= N <= 10^6) . Tom e Jerry vão jogar o jogo um de cada vez. Cada um deles subtrairá o número n [n < N] para que N % n = 0 .
O jogo continua até que um dos participantes possa fazer uma jogada. Quem não puder fazer a última jogada perde.
O jogo começa com Tom dando o primeiro passo. É claro que os dois farão movimentos da maneira ideal. Você deve determinar quem ganha o jogo.

Entrada: a primeira linha de entrada de cada teste consiste no número N.
O programa deve gerar: 1, se Tom vencer; 0 se Jerry vencer. Em uma linha separada.

Limitações:
1 <= N <= 10 ^ 6

Exemplo
Entrada: 2 / Saída: 1
Entrada: 4 / Saída: 1

2. N reuniões em uma sala
Há uma sala de reuniões em uma empresa. Existem N reuniões na forma de (S[i], F[i]) que S [i] é a hora de início da reunião ie F [i] é a hora de término da reunião i.
Qual é o número máximo de reuniões que podem ser acomodadas na sala de reuniões?

Entrada:
A primeira linha de entrada consiste no número de casos de teste. A descrição dos casos de teste T é a seguinte:
A primeira linha consiste no tamanho da matriz, a segunda linha possui a matriz que contém o horário de início de todas as reuniões, cada uma separada por um espaço, ou seja, S [i]. E a terceira linha possui a matriz que contém o tempo de término de todas as reuniões, cada uma separada por um espaço, ou seja, F [i].
Saída:
Em cada linha separada, imprima a ordem em que as reuniões ocorrem separadas por um espaço.

Restrições:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S[ i ], F[ i ] ≤ 100000


Exemplo:
Entrada:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879 77924
112960 114515 81825 93424 54316 35533 73383 160252

Saída:
1 2 4 5
6 7 1

Tradução
A empresa possui uma sala de reuniões. Existem N reuniões no formulário (S [i], F [i]) , onde S [i] é o horário de início da reunião i e F [i] é o horário de término da reunião i.
A tarefa é colocar o número máximo de reuniões na sala de reuniões.

Dados de entrada:
A primeira linha de entrada contém o número de testes. A descrição dos testes é assim:
• a primeira linha consiste no tamanho da matriz;
• a segunda linha possui uma matriz que contém a hora de início de todas as reuniões S [i], cada uma das quais é separada por um espaço;
• a terceira linha contém uma matriz que contém o horário de término de todas as reuniões F [i], cada uma separada por um espaço.
Conclusão:
em cada linha separada, imprima a ordem em que as reuniões ocorrem, separadas por espaços.

Limitações:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S [i], F [i] ≤ 100000


Um exemplo:
Entrada:
2
6
1 3 0 5 8 5
2 4 6 7 9 9
8
75250 50074 43659 8931 11273 27545 50879
77924 112960 114515 81825 93424 54316 35533 73383 160252

Saída:
1 2 4 5
6 7 1


3. Inversão da matriz
Dada uma matriz de números inteiros positivos. A tarefa é encontrar a contagem de inversão da matriz.
Contagem de inversão: para uma matriz, a contagem de inversão indica a que distância (ou fechamento) a matriz está sendo classificada. Se a matriz for classificada na ordem inversa, a contagem de inversões é o máximo.
Formalmente, dois elementos a [i] e a [j] formam uma inversão se a[i] > a[j] e i < j .

Entrada: A primeira linha de entrada contém um número inteiro T, indicando o número de casos de teste. A primeira linha de cada caso de teste é N, o tamanho da matriz. A segunda linha de cada caso de teste contém N elementos.
Saída: imprima a contagem de inversão da matriz.

Restrições:
1 ≤ T ≤ 100
1 ≤ N ≤ 107
1 ≤ C ≤ 1018


Exemplo:
Entrada:
1
5
2 4 1 3 5

Saída:
3

Tradução
Uma matriz de números naturais é fornecida. A tarefa é encontrar o número de inversões da matriz.
Número de inversões: para uma matriz, o número de inversões indica a que distância (ou fechamento) a matriz está da classificação. Se a matriz já estiver classificada, o número de inversões será 0. Se a matriz estiver classificada na ordem inversa, o número de inversões será o máximo.
Formalmente, dois elementos a [i] e a [j] formam uma inversão se a[i] > a[j] e i < j .

Dados de entrada:
a primeira linha contém um número inteiro T, indicando o número de testes. A primeira linha de cada teste é N, o tamanho da matriz. A segunda linha de cada teste contém N elementos.
Saída:
imprima o número de inversões da matriz.

Limitações:
1 ≤ T ≤ 100
1 ≤ N ≤ 10 7
1 ≤ C ≤ 10 18


Um exemplo:
Entrada:
1
5
2 4 1 3 5

Saída:
3


Bem, como prometido! Muitos foram capazes de responder a perguntas, mas com as tarefas, aparentemente, foi mais difícil! :)

As respostas


Pergunta 1
Resposta: na porta preta.
Solução: vejamos a descrição na porta marrom "apenas uma porta está dizendo a verdade". Pode ser verdadeiro ou falso.
Cenário 1: A descrição na porta marrom é verdadeira. Então a descrição na porta preta ("o monstro está aqui") deve ser uma mentira. Isso significa que a caverna com a porta preta contém tesouros!
Cenário 2: a descrição na porta marrom é falsa. Então, ambas as descrições são falsas ou ambas verdadeiras. Ambas as descrições não podem ser verdadeiras, pois isso é impossível e não é consistente. Isso significa que ambas as descrições são falsas. Mais uma vez, um tesouro na porta preta.

Questão 2
Resposta: idade das filhas: 3 anos, 3 anos e 8 anos.
Solução: 1) Para iniciantes, diz-se que o produto de idades é 72.
Encontre todas as opções possíveis para as quais o produto será igual a 72:
  • 1 * 1 * 72 = 72
  • 1 * 2 * 36 = 72
  • 1 * 3 * 24 = 72
  • 1 * 4 * 18 = 72
  • 1 * 6 * 12 = 72
  • 1 * 8 * 9 = 72
  • 2 * 2 * 18 = 72
  • 2 * 3 * 12 = 72
  • 2 * 4 * 9 = 72
  • 2 * 6 * 6 = 72
  • 3 * 3 * 8 = 72
  • 3 * 4 * 6 = 72

Obviamente, isso não é suficiente para dar uma resposta exata.
Em seguida, Shiyam examina o número da casa (número que não é relatado) e ainda não pode dar uma resposta exata. Resuma todas as opções encontradas anteriormente:
  • 1 + 1 + 72 = 74
  • 1 + 2 + 36 = 39
  • 1 + 3 + 24 = 28
  • 1 + 4 + 18 = 23
  • 1 + 6 + 12 = 19
  • 1 + 8 + 9 = 18
  • 2 + 2 + 18 = 22
  • 2 + 3 + 12 = 17
  • 2 + 4 + 9 = 15
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14
  • 3 + 4 + 6 = 13

Obviamente, uma das somas é o número da casa. Como Shiyam não conseguiu responder exatamente, a conclusão inequívoca é que o número da casa é 14, pois existem duas opções com esse resultado.
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14

3) A partir da terceira dica, deve-se entender que existe uma filha mais velha (não várias, mas uma), portanto, das duas opções que encontramos na segunda etapa, apenas uma é adequada.

Tarefa 1
Lolohaev estava pensando direito!
Resposta: (n - 1) % 2
Solução:
 using System; public class TomJerry { static public void Main () { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.printIn((n - 1) % 2); } } 


Tarefa 2
A solução usou o algoritmo Greedy.
 #include <bits/stdc++.h> using namespace std; struct Activity { int start, finish, index; }; bool activityCompare(Activity s1, Activity s2) { return s1.finish < s2.finish; } int main() { int t, n, i, j; cin >> t; while (t--) { cin >> n; Activity arr[n]; for (i = 0; i < n; i++) { cin >> arr[i].start; arr[i].index = i; } for (i = 0; i < n; i++) cin >> arr[i].finish; sort(arr, arr + n, activityCompare); i = 0; cout << arr[i].index + 1 << " "; for (int j = 1; j < n; j++) { if (arr[j].start >= arr[i].finish) { cout << arr[j].index + 1 << " "; i = j; } } cout << endl; } return 0; } 


Tarefa 3
 #include<iostream> using namespace std; int merge(int* arr, int* LArr, int* RArr, int m, int n) { int i = 0, j = 0, k = 0; int count = 0; while (i < m && j < n) { if (LArr[i] <= RArr[j]) arr[k++] = LArr[i++]; else { arr[k++] = RArr[j++]; count = count + m - i; } } while (i < m) arr[k++] = LArr[i++]; while (j < n) arr[k++] = RArr[j++]; return count; } int mergeSort(int* arr, int start, int end) { if (start > end) return 0; if (start == end) return 0; if (start == end - 1) { if (arr[start] <= arr[end]) return 0; else swap(arr[start], arr[end]); return 1; } int mid = (start + end) / 2; int* LArr = new int[mid + 1]; int* RArr = new int[end - mid]; int i; for (i = start; i <= mid; i++) LArr[i] = arr[i]; for (i = mid + 1; i <= end; i++) RArr[i - (mid + 1)] = arr[i]; int count = 0; count += mergeSort(LArr, 0, mid); count += mergeSort(RArr, 0, end - mid - 1); count += merge(arr, LArr, RArr, mid + 1, end - mid); delete[] LArr; delete[] RArr; return count; } int main() { int t, n,*arr; cin >> t; while (t--) { cin >> n; arr = new int[n]; for (int i = 0; i < n; i++) cin >> arr[i]; cout << mergeSort(arr, 0, n - 1) << endl; } } 

Source: https://habr.com/ru/post/pt477460/


All Articles