Reto tecnológico de Capgemini 2019 | Ronda 2 y Ronda 3 Pregunta

La ronda 2:

MISIÓN CON MI6: El año pasado se produjo un hackeo en la red de defensa más segura y crucial de EE.UU. Los piratas informáticos descargaron archivos y documentos confidenciales cruciales relacionados con la defensa de su red y, después de eso, volaron a Dubái para entregar los documentos a algunos equipos relacionados con el terrorismo. El agente de investigación MI6 descubrió que hay una reunión programada entre las partes en la habitación del hotel Burj Khalifa. La agencia MI6 formó un equipo y envió a sus mejores agentes para recuperar documentos y atrapar piratas informáticos.

Después de llegar a Dubái, los agentes se registraron en un hotel y encontraron una manera de ir a la habitación pirateando las cámaras de vigilancia, pero hay una seguridad muy alta en el piso donde se supone que se llevará a cabo la reunión. Entonces decidieron tomar otra ruta caminando sobre la pared del edificio del hotel con la ayuda de la fuerza de repulsión electromagnética. Tienen un aparato con este tipo de tecnología que les ayuda a caminar por la pared del hotel.

Hay varias láminas de metal en forma de cuadrado adheridas a la pared exterior del hotel. Un agente especialista, Bob, decidió caminar sobre la pared y su colega lo guió y le indicó en qué hoja cuadrada tenía que caminar. El colega de Bob le envía un conjunto de instrucciones que lo ayudan a determinar qué hoja en particular tiene que soportar. Un conjunto de instrucciones es una string que consta de las letras ‘L’, ‘R’, ‘U’, ‘D’.

Para simplificar, supongamos que Bob se queda en el punto (0, 0) en una gran pared. Cumple constantemente todas las instrucciones enviadas por su colega. Supongamos que ahora se queda en el punto (X, Y), luego, dependiendo de cuál sea la instrucción actual, se mueve en una dirección:

‘L’: from (X,Y) moves to point (X,Y-1)
‘R’: from (X,Y) moves to point (X,Y+1)
‘U’: from (X,Y) moves to point (X-1,Y)
'D' : from (X,Y) moves to point (X+1,Y)

Inicialmente, todos los puntos son buenos y no hay grietas en ningún punto o hoja. Pero si Bob ya visitó algún punto en cualquier momento, la próxima vez este punto se rompió. Cada vez que Bob da un paso en los puntos agrietados, se resbala en la pared.

Se le da una string S que indica el conjunto de instrucciones para Bob. Tu trabajo es calcular cuántas veces Bob se resbala de su posición.

Formato de entrada:

Entrada 1: Será una string que le diga a la string S que denota el conjunto de instrucciones para Bob.

Constraints
1 ≤ S ≤ 105

Formato de salida: será un número entero que indica cuántas veces Bob se desliza de su posición

Caso de prueba de muestra 1

Input
RRULDL
Output
2
Here is my solution:

C++

#include<bits/stdc++.h>
using namespace std;
int main()
{
    /*input the string*/
    string str;
    cin>>str;
    /* best data structure for this problem is 
       unordered map , by using this data structure
       we can detect every repeating steps*/
    unordered_map<string,int> mp;
    int res=0;
    int x=0,y=0;
    string ss;
    mp["0,0"]=1;
    /*traverse the whole string */
    for(int i=0;i<str.size();i++)
    {
        if(str[i]=='L')
        {
            y--;
            ss=to_string(x)+","+to_string(y);
            if(mp[ss]) res++;
            else
                mp[ss]=1;
        }
        else if(str[i]=='R')
        {
            y++;
            ss=to_string(x)+","+to_string(y);
            if(mp[ss]) res++;
            else
                mp[ss]=1;
        }
        else if(str[i]=='D')
        {
            x++;
            ss=to_string(x)+","+to_string(y);
            if(mp[ss]) res++;
            else
                mp[ss]=1;
        }
        else if(str[i]=='U') {
            x--;
            ss = to_string(x) + "," + to_string(y);
            if (mp[ss]) res++;
            else
                mp[ss] = 1;
        }
    }
    cout<<res;
    return  0;
  
}

La ruta Bob consta de los siguientes puntos:

0,0 ---> 0,1 ---> 0,2 ----> -1,2 ---> -1,1 ----> 0,1(cracks) ----> 0,0 (cracks)

Por lo tanto, habrá 2 puntos en los que Bob visitó nuevamente, por lo que se desliza 2 pasos.

Ronda 3:

Prisiones y cárceles más locas: algunas prisiones son conocidas por ser violentas y tratar a los prisioneros como animales, lo que lleva a tácticas inhumanas y poco éticas para mantener la paz. Hay una prisión ubicada en Noruega, Halden a menudo se describe como pacífica y relajante. Los prisioneros reciben buena comida, café caliente y celdas que cuentan con televisores, mini refrigeradores, baños privados y vistas panorámicas del bosque circundante.

El gobierno de Noruega construye 3 prisiones nuevas, cada una tiene su propio diseño único diferente de las demás. Cada prisión consta de celdas dispuestas en una cuadrícula de una, dos o tres dimensiones. Carcelero puede llenar N presos en las celdas.

La Distancia entre dos celdas es el menor número de movimientos que necesitaría un preso para llegar a una celda desde la otra. En un movimiento, el prisionero puede entrar en una de las celdas adyacentes.

Dos presos pueden oírse si la distancia entre sus celdas es como máximo D. Tu tarea es calcular cuántos pares de presos hay de modo que un preso pueda oír al otro preso.

Ejemplo: supongamos que la prisión será de tipo tridimensional, entonces se verá como a continuación

Formato de entrada:

  • Entrada 1: Será el número entero que diga el tipo de prisión P

  • Entrada 2: Será el número entero que diga el número de presos N

  • Entrada 3: Será el número entero que diga la mayor distancia D a la que dos presos pueden oírse entre sí

  • Entrada 4: Será el número entero que diga el tamaño de la prisión S; (la coordenada más grande permitida para aparecer en la entrada):

    Cuando P=1, S será como máximo 75000000.

    Cuando P=2, S será como máximo 75000.

    Cuando P=3, S será como máximo 75.

  • Entrada 5: Será una array de strings que indica las coordenadas de cada prisionero. El formato de array será como:

    La primera línea dirá el número total de filas, es decir, el número total de prisioneros N

Cada una de las siguientes N líneas contiene P enteros separados por comas simples: las coordenadas de un prisionero. Cada coordenada estará entre 1 y S (inclusive). Más de un recluso puede ocupar la misma celda. Si la P es uno, entonces no habrá coma, solo habrá un valor único en cada línea.

Restricciones

1 ≤ P ≤ 3
1 ≤ N ≤ 100000
1 ≤ D ≤ 100000000

Formato de salida: Será el número entero único, el número de parejas de presos que pueden escucharse entre sí.

Ejemplo de caso de prueba 1:

Input
3
8
10
20
8
10,10,10
10,10,20
10,20,10
10,20,20
20,10,10
20,10,20
20,20,10
20,20,20
Output
12

Solución en C++:

C++

#include<bits/stdc++.h>
#define ll long int
using namespace std;
  
//calculate distance in 2D for two grid
/* For 2D jail */
int TwoD(ll x1,ll y1, ll x2, ll y2,ll distance )          
{
  
    ll d=0;
    if(x1==x2){
        d=abs(y1-y2);
    }
    else if(y1==y2){
        d=abs(x1-x2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
  
}
  
  
//calculate distance in 3D for two  grid
 /* For 3D jail*/
int  ThreeD(ll x1, ll y1,ll z1, ll x2,ll y2,ll z2,ll distance)                    
{
    ll d=0;
    if(x1==x2&&y1==y2){
        d=abs(z1-z2);
    }
    else if(y1==y2&&z1==z2){
        d=abs(x1-x2);
    }
    else if(z1==z2&&x1==x2){
        d=abs(y1-y2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
}
  
  
//driver program
int main()
{
    ll p,n,d,s;
  
    ll res=0;
    cin>>p;
    cin>>n;
    cin>>d;
    cin>>s;
    cin>>n;
    ll distance=d ;
    int inp[n],inp1[n],inp2[n];
    ll x1,x2,y1,y2,z1,z2;
  
    if(p==1)
    {
        for(int i=0;i<n;i++)
        {
            cin>>inp[i];
  
  
        }
    }
    else if(p==2) {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d", &inp[i], &inp1[i]);
        }
    }
    else {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d,%d", &inp[i], &inp1[i], &inp2[i]);
  
        }
    }
  
  
  
    if(p==1)
    {
        sort(inp,inp+n);
        for(int i=0;i<n-1;i++)
        {
            for (int j = i+1; j <n ; j++) {
                if(inp[i] && inp[j] && inp[i]<=s && inp[j]<=s) {
                    if (abs(inp[i] - inp[j]) <= distance) {
                        res++;
                    } else {
                        break;
                    }
                }
  
            }
  
  
        }
    }
    else if(p==2) {
        for (int i = 0; i < n-1; i++) {
            for(int j=i+1;j<n;j++) {
                x1 = inp[i];
                y1 = inp1[i];
                x2 = inp[j];
                y2 = inp1[j];
                if(x1 && y1 && x2 && y2 && x1<=s && y1<=s  && x2<=s && y2<=s  )
                    if(TwoD(x1,y1,x2,y2,distance)) {
                        res++;
                    }
            }
        }
    }
    else {
        res=0;
        for (int i = 0; i < n-1; i++) {
            for(int j=i+1;j<n;j++) {
                x1 = inp[i];
                y1 = inp1[i];
                z1 = inp2[i];
                x2 = inp[j];
                y2 = inp1[j];
                z2 = inp2[j];
                if(x1 && y1 && z1 && x2 && y2 && z2 && x1<=s && y1<=s && z1<=s && x2<=s && y2<=s && z2<=s )
                    if(ThreeD(x1,y1,z1,x2,y2,z2,distance)){
                        res++;
                    }
  
            }
        }
    }
  
    cout<<res;
    return  0;
}

Publicación traducida automáticamente

Artículo escrito por subhadeepmodak00 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *