Data Analyst
Una vez, un becario de fraude en Yandex Ads se unió al equipo. Mientras el grupo de fraude operaba, simulando tráfico en sus sitios mediante visitas de bots, y así recibían dinero por impresiones de anuncios por parte de bots, la tarea del becario era encontrar todos esos sitios fraudulentos con tráfico falso. Curiosamente, todo el tráfico en estos sitios se generaba con sustitución de IP, haciendo que pareciera que un bot visitaba desde la ciudad A, pero en realidad, el dispositivo estaba en un lugar completamente diferente. Pasó mucho tiempo, y el becario intentó cubrir a todo este grupo de fraude, incluso logrando atrapar algunos sitios en partes. Pero no se pudo atrapar toda la red. Después de un tiempo, notó una noticia: en la ciudad A, el 02.08.2025, no había internet móvil en absoluto. Sin embargo, el internet cableado (doméstico) seguía funcionando. Dado esto, ¿cómo puede el becario encontrar todos los sitios falsos? Tienes registros de sitios en formato tabla para el período del 30.07.2025 al 10.08.2025: timestamp | site_id | city_id Cada registro corresponde a una visita a un sitio por un dispositivo. Se sabe que el tráfico de bots cambia mucho menos que el tráfico real por día. Tu tarea es encontrar todos los sitios cuyo tráfico consistió principalmente en bots que falsificaron su región a la ciudad A. Nota La tabla que contiene los datos se llama logs. Ejemplo de un registro de tabla: timestamp | site_id | city_id [phone]:13:53 | 6e84d9b71ca44aea | A
Afanasy había estado trabajando durante 2 semanas en escribir un código capaz de resolver crucigramas japoneses con soporte para nueve colores, cuando en una reunión de equipo, un colega le dijo que podía manejar la tarea más rápido él mismo, y que ya no tenía sentido en el programa. Pero Afanasy, siendo optimista, decidió seguir practicando esta tarea y hacer lo siguiente: estimar qué tan bien maneja su colega los crucigramas. Para esta evaluación, eligió un análogo de la métrica IoU — el cálculo será similar al clásico Intersection Over Union, pero por colores. Funciona de la siguiente manera: cada celda coincidente en el original y en la solución por color suma 1 al numerador, y en el denominador, se suma 1 por cada celda en el original y en la solución (para celdas coincidentes, solo se suma una). Después, se realiza un promedio sobre el número de colores en la imagen original, redondeado a dos decimales; el cero no se considera un color, por lo que la métrica no debe calcularse para celdas de este color. La entrada comienza con una línea que contiene el número de filas n y columnas m (en ese orden). Luego, siguen 2n líneas, que contienen m números separados por espacios: las primeras n líneas corresponden a la crucigrama enviado, y las siguientes n — a la imagen original. Se asume que cada línea, comenzando desde la segunda, contiene exactamente m números. Como respuesta, debe imprimir un número redondeado a dos decimales, como en los ejemplos. Aquí algunos ejemplos: 1. Primer ejemplo [phone] -> 1.0 Explicación: la contribución de las celdas coincidentes y no coincidentes (1.0 + 1.0 + 1.0 + 1.0) / número de colores (4) 2. Segundo ejemplo [phone] -> 0.08 Explicación: la contribución de las celdas coincidentes y no coincidentes (0.25 + 0.0 + 0.0) / número de colores (3); los ceros no se consideran, ni como celdas en las representaciones ni en el número de colores. 3. Tercer ejemplo [phone] donde la imagen enviada comienza [phone] — donde termina la imagen enviada 0 1 2 — donde comienza la imagen original [phone] -> 0.47 Explicación: la contribución de las celdas coincidentes y no coincidentes (0.4 + 0.5 + 0.5) / número de colores (3); los ceros no se consideran ni como celdas en las representaciones ni en el número de colores. 4. Cuarto ejemplo [phone] -> 0.0 Explicación: la contribución de las celdas coincidentes y no coincidentes (0.0) / número de colores (1); los ceros no se consideran ni como celdas en las representaciones ni en el número de colores.
B. Prefijos y Sufijos Dado un array ordenado de n ceros. En cada paso, puedes elegir un número arbitrario de los primeros o últimos elementos de este array, y sumar uno a todos los elementos seleccionados. ¿Es posible alcanzar el estado especificado del array después de alguna cantidad de estas operaciones? Formato de entrada La primera línea contiene un entero 1 ≤ n ≤ 100000 — el número de elementos en el array. La segunda línea contiene n números enteros no negativos a1, a2, ..., an separados por espacios, donde ai ≤ 10^18 — los elementos finales deseados. Formato de salida Imprime "YES" si tal estado es alcanzable, y "NO" si no lo es. Ejemplo Entrada [phone] Salida YES Nota Los estados [phone] se pueden alcanzar de la siguiente manera: sumar uno a los primeros tres elementos, resultando en [phone] sumar uno a los últimos cuatro elementos, resultando en [phone] sumar uno al último elemento, resultando en [phone]
D. Fuegos artificiales chinos Vladimir compró un conjunto de 3 fuegos artificiales chinos. Se ven exactamente iguales y están mezclados en una caja, pero según las instrucciones, tienen diferentes fiabilidades: 1. "Elite" — tasa de defectos del 10% (probabilidad de éxito 0.9). 2. "Estándar" — tasa de defectos del 20% (probabilidad de éxito 0.8). 3. "Economía" — tasa de defectos del 40% (probabilidad de éxito 0.6). Vladimir toma aleatoriamente el primer fuego artificial, lo enciende, y funciona correctamente. Contento, Vladimir decide lanzar los otros dos fuegos artificiales uno tras otro. ¿Cuál es la probabilidad de que tanto el segundo como el tercer fuego artificial también funcionen correctamente — sin defectos? Redondea la respuesta a tres decimales. Formato de salida Un número decimal redondeado a 3 decimales. Por ejemplo, 0.98 o 0.999
¿Funcionaría la solución propuesta para SQLite?
A. El Mejor Laboratorio Científico En una cierta ciudad, varios laboratorios científicos investigan cultivos bacterianos. Estudian una secuencia de muestras, donde cada muestra pertenece a una cepa específica (tipo de bacteria). La universidad principal de investigación biológica anunció un concurso: encontrar la cantidad máxima de muestras consecutivas que se pueden analizar considerando la restricción. Es decir: en cualquier segmento continuo de la secuencia, no debe haber más de K cepas diferentes. Nuestro laboratorio aspira a ser el mejor de la ciudad. Para ganar el concurso, necesitamos encontrar exactamente esa longitud máxima de segmento que cumple con la condición estricta. Contamos contigo, ya que en caso de victoria, el laboratorio recibirá una subvención que abrirá nuevos horizontes para nuestra investigación. Formato de entrada La primera línea contiene dos números: N — la longitud de la secuencia de muestras y K — la restricción en la cantidad de cepas diferentes. La segunda línea contiene N números — los elementos de la secuencia. Formato de salida El programa debe mostrar el número de la longitud máxima de un segmento de la secuencia de muestras. Ejemplo 1 Entrada [phone] Salida 3
D. Valera y las máquinas expendedoras En un centro de negocios, hay 10 máquinas expendedoras externamente idénticas con chocolates. Cada máquina dispensa un chocolate con su propia probabilidad fija, que inicialmente es desconocida y puede variar entre máquinas. Valera, con ganas de conseguir la mayor cantidad de chocolates posible, tiene un presupuesto limitado a 200 tugrik. Cada intento de compra (usar cualquier máquina una vez) cuesta exactamente 1 tugrik — el pago se realiza independientemente de si la máquina dispensa un chocolate o no. Valera, intentando aprender las probabilidades de las máquinas, se encontró con el guardia de seguridad Alexei, quien compartió una información importante. El guardia le dijo que 2/5 de las máquinas tienen probabilidades extraídas de una distribución uniforme en [0.2, 0.3], 2/5 de [0.4, 0.5], y el resto de [0.85, 1]. Tu tarea es diseñar un algoritmo que ayude a Valera a conseguir la mayor cantidad posible de chocolates. Protocolo de interacción Esta es una tarea interactiva. Tu programa debe primero mostrar el número de la máquina — un número del 0 al 9. Luego, el sistema (interactor) devolverá el resultado: 1 si se dispensó un chocolate, o 0 si no. Tu programa puede leer este valor (por ejemplo, mediante input()) para usarlo en cálculos posteriores. Sistema de puntuación En cada prueba, se evaluará el porcentaje de intentos exitosos para obtener chocolates. Si este porcentaje supera el 75%, la prueba se considera pasada. Nota Se recomienda usar Python 3.8 (Handbook DS) como compilador.