Problema n. ° 26: capacitación en TI: problemas y desafíos actuales de compañías líderes

Urgente en la habitación! Reactivación del título de formación en TI. Nuevamente reunimos las preguntas y tareas que se hicieron en entrevistas en empresas de TI.

imagen

Los problemas aparecerán cada semana. ¡Estén atentos! La columna está respaldada por la agencia de reclutamiento Spice IT .

Hoy tenemos tareas, de niveles muy diferentes de complejidad, desde entrevistas a la compañía india Flipkart. Bueno, ¿han pasado la seguridad social?

Preguntas


1. Ladrón, Tesoro y 2 Puertas
Un ladrón acaba de encontrar un par de antiguas cuevas del tesoro. Una de las cuevas está llena de tesoros increíbles y la otra tiene un monstruo que escupe fuego y se comerá a cualquiera que abra esa cueva.
Una cueva tiene una puerta negra decorada con diamantes y la otra cueva tiene una puerta marrón decorada con zafiros.
Cada una de las puertas tiene una descripción grabada en la parte superior. Las descripciones dicen:

Black Door: Monster está aquí.
Puerta marrón: solo una puerta dice la verdad.

¿Qué puerta debería abrir el ladrón?

Traducción
El ladrón acaba de encontrar un par de cuevas antiguas. Una de las cuevas está llena de tesoros increíbles, y la otra es un monstruo que escupe fuego y se comerá a cualquiera que abra esta cueva.
La entrada a la primera cueva está bloqueada por una puerta negra decorada con diamantes, y en otra, una puerta marrón decorada con zafiros.
Cada puerta tiene una descripción grabada en la parte superior. Descripciones leídas:

Puerta negra: el monstruo está aquí.
Puerta marrón: solo una puerta dice la verdad.

¿Qué puerta debe abrir un ladrón?

2. Encuentra las edades de las hijas
Alok tiene tres hijas. Su amigo Shyam quiere saber las edades de sus hijas. Alok le da la primera pista.
  1. El producto de sus edades es 72. Shyam dice que esta no es suficiente información. Alok le da una segunda pista.
  2. La suma de sus edades es igual al número de mi casa. Shyam sale y mira el número de la casa y dice "Todavía no tengo suficiente información para determinar las edades". Alok admite que Shyam no puede adivinar y le da la tercera pista
  3. A la mayor de las chicas le gusta el helado de fresa. Shyam puede adivinar después de la tercera pista.

¿Puedes adivinar cuáles son las edades de tres hijas?

Traducción
Alok tiene tres hijas. Su amigo Shiyam quiere saber la edad de sus hijas. Alok le da la primera pista.
  1. El producto de sus edades es 72. Shiyam dice que esta información no es suficiente, luego Alok le da una segunda pista.
  2. La suma de sus edades es igual al número de mi casa. Shiyam sale, mira el número de la casa y dice: "Todavía no tengo suficiente información para determinar la edad". Alok admite que Shiyam no podrá adivinar, y por lo tanto le da una tercera pista.
  3. La mayor de las chicas adora el helado de fresa. Solo después de la tercera pista, Shiyama logró adivinar la edad de sus hijas.

¿Puedes adivinar cuántos años tiene cada una de las tres hijas?

Las tareas


1. Tom y Jerry
Desde hace mucho tiempo, Tom y Jerry han estado luchando entre sí por un pedazo de queso. Entonces finalmente viniste a rescatar y decidiste que el resultado de la pelea será decidido por un juego matemático, en el que escribirás un número N (1 <= N <= 10^6) . Tom y Jerry jugarán el juego alternativamente y cada uno de ellos restará un número n [n < N] tal que N % n = 0 .
El juego se repite turno a turno hasta que el que ahora no puede hacer otro movimiento pierde el juego.
El juego comienza con Tom jugando el primer movimiento. Está bien entendido que ambos harán movimientos de manera óptima. Debes determinar quién gana el juego.

Entrada: la primera línea de cada caso de prueba consiste en N el número.
Salida: imprime 1 si Tom gana e imprime 0 si Jerry gana en una línea separada.

Restricciones:
1 <= N <= 10^6

Muestra:
Entrada: 2 / Salida: 1
Entrada: 4 / Salida: 1

Traducción
Durante mucho tiempo, Tom y Jerry se pelearon por un pedazo de queso. Decidiste ayudarlos a determinar rápidamente el ganador. El resultado del partido se decidirá en un juego matemático en el que escribirás el número N (1 <= N <= 10^6) . Tom y Jerry jugarán el juego uno a la vez. Cada uno de ellos restará el número n [n < N] para que N % n = 0 .
El juego continúa hasta que uno de los participantes pueda hacer un movimiento. Cualquiera que no pueda hacer el último movimiento pierde.
El juego comienza con Tom haciendo el primer movimiento. Está claro que ambos harán movimientos de manera óptima. Debes determinar quién gana el juego.

Entrada: la primera línea de entrada de cada prueba consiste en el número N.
El programa debería generar: 1, si Tom gana; 0 si Jerry gana. En una linea separada.

Limitaciones:
1 <= N <= 10 ^ 6

Ejemplo
Entrada: 2 / Salida: 1
Entrada: 4 / Salida: 1

2. N reuniones en una sala
Hay una sala de reuniones en una empresa. Hay N reuniones en forma de (S[i], F[i]) donde S [i] es la hora de inicio de la reunión i y F [i] es la hora de finalización de la reunión i.
¿Cuál es el número máximo de reuniones que se pueden acomodar en la sala de reuniones?

Entrada:
La primera línea de entrada consiste en el número de casos de prueba. La descripción de los casos de prueba T es la siguiente:
La primera línea consiste en el tamaño de la matriz, la segunda línea tiene la matriz que contiene el tiempo de inicio de todas las reuniones, cada una separada por un espacio, es decir, S [i]. Y la tercera línea tiene la matriz que contiene el tiempo de finalización de todas las reuniones, cada una separada por un espacio, es decir, F [i].
Salida:
En cada línea separada, imprima el orden en que se llevan a cabo las reuniones separadas por un espacio.

Restricciones:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S[ i ], F[ i ] ≤ 100000


Ejemplo:
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

Salida:
1 2 4 5
6 7 1

Traducción
La empresa tiene una sala de reuniones. Hay N reuniones en el formulario (S [i], F [i]) , donde S [i] es la hora de inicio de la reunión i, y F [i] es la hora de finalización de la reunión i.
La tarea es colocar el número máximo de reuniones en la sala de reuniones.

Datos de entrada:
La primera línea de entrada contiene el número de pruebas. La descripción de las pruebas se ve así:
• la primera línea consiste en el tamaño de la matriz;
• la segunda línea tiene una matriz que contiene la hora de inicio de todas las reuniones S [i], cada una de las cuales está separada por un espacio;
• la tercera línea contiene una matriz que contiene la hora de finalización de todas las reuniones F [i], cada una de las cuales está separada por un espacio.
Conclusión
en cada línea separada imprima el orden en que se llevan a cabo las reuniones, separadas por espacios.

Limitaciones:
1 ≤ T ≤ 70
1 ≤ N ≤ 100
1 ≤ S [i], F [i] ≤ 100000


Un ejemplo:
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

Salida:
1 2 4 5
6 7 1


3. Inversión de la matriz
Dado un conjunto de enteros positivos. La tarea es encontrar el recuento de inversión de la matriz.
Recuento de inversión: para una matriz, la cuenta de inversión indica qué tan lejos (o cerca) está la matriz de ser ordenada. Si la matriz se ordena en orden inverso, el recuento de inversiones es el máximo.
Formalmente, dos elementos a [i] y a [j] forman una inversión si a[i] > a[j] e i < j .

Entrada: La primera línea de entrada contiene un número entero T que indica el número de casos de prueba. La primera línea de cada caso de prueba es N, el tamaño de la matriz. La segunda línea de cada caso de prueba contiene N elementos.
Salida: Imprime el recuento de inversión de la matriz.

Restricciones:
1 ≤ T ≤ 100
1 ≤ N ≤ 107
1 ≤ C ≤ 1018


Ejemplo:
Entrada:
1
5
2 4 1 3 5

Salida:
3

Traducción
Se da una serie de números naturales. La tarea es encontrar el número de inversiones de la matriz.
Número de inversiones: para una matriz, la cantidad de inversiones indica qué tan lejos (o cerca) está la matriz de la clasificación. Si la matriz ya está ordenada, entonces el número de inversiones es 0. Si la matriz está ordenada en reversa, entonces el número de inversiones es el máximo.
Formalmente, dos elementos a [i] y a [j] forman una inversión si a[i] > a[j] e i < j .

Datos de entrada:
la primera línea contiene un número entero T, que indica el número de pruebas. La primera línea de cada prueba es N, el tamaño de la matriz. La segunda línea de cada prueba contiene N elementos.
Salida:
imprime el número de inversiones de la matriz.

Limitaciones:
1 ≤ T ≤ 100
1 ≤ N ≤ 10 7
1 ≤ C ≤ 10 18


Un ejemplo:
Entrada:
1
5
2 4 1 3 5

Salida:
3


Bueno, como se prometió! Muchos pudieron responder preguntas, pero con las tareas, aparentemente, ¡fue más difícil! :)

Las respuestas


Pregunta 1
Respuesta: en la puerta negra.
Solución: veamos la descripción en la puerta marrón "solo una puerta dice la verdad". Puede ser verdadero o falso.
Escenario 1: La descripción en la puerta marrón es cierta. Entonces la descripción en la puerta negra ("el monstruo está aquí") debería ser una mentira. ¡Esto significa que la cueva con la puerta negra contiene tesoros!
Escenario 2: la descripción en la puerta marrón es falsa. Entonces ambas descripciones son falsas o ambas verdaderas. Ambas descripciones no pueden ser ciertas, ya que esto es imposible y no es consistente. Esto significa que ambas descripciones son falsas. De nuevo, un tesoro en la puerta negra.

Pregunta 2
Respuesta: edad de las hijas: 3 años, 3 años y 8 años.
Solución: 1) Para empezar, se dice que el producto de las edades es 72.
Encuentre todas las opciones posibles para las cuales el producto 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

Esto, por supuesto, no es suficiente para dar una respuesta exacta.
A continuación, Shiyam mira el número de la casa (cuyo número no se informa) y aún no puede dar una respuesta exacta. Resuma todas las opciones 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, una de las sumas es el número de casa. Como Shiyam no pudo responder exactamente, la conclusión inequívoca es que el número de la casa es 14, ya que hay dos opciones con este resultado.
  • 2 + 6 + 6 = 14
  • 3 + 3 + 8 = 14

3) A partir de la tercera pista, debe entenderse que hay una hija mayor (no varias, sino una), por lo tanto, de las dos opciones que encontramos en el segundo paso, solo una es adecuada.

Tarea 1
¡Lolohaev estaba pensando bien!
Respuesta: (n - 1) % 2
Solución:
 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); } } 


Tarea 2
La solución utilizó el algoritmo de 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; } 


Tarea 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/477460/


All Articles