Editorial for Sol y Luna en Nochebuena


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: Kaarlarax

Pista 1

El problema es una simulación directa. La clave es evaluar las condiciones en el orden jerárquico correcto: primero se verifica si alguien tiene frío, si nadie tiene frío se verifica el calor, y si nadie tiene calor, se procesa el estado "Bien".

Pista 2

Para el bloque del "Resumen", no basta con imprimir los resultados cronológicamente. Es necesario almacenar cada evento en una estructura (struct) que contenga la temperatura, el mensaje, un valor numérico para la sensación, el sujeto y el índice original para poder aplicar un ordenamiento personalizado.


Solución

La tarea consiste en procesar \(N\) momentos de temperatura y aplicar reglas de prioridad para determinar qué mensaje mostrar y cómo ordenarlos después.

  1. Evaluación de Sensaciones:

    • Frío: Se activa si \(T_i \leq A\). Si ambas perritas sienten frío, se elige a la que tenga el umbral \(A\) más cercano a la temperatura actual. Si hay empate en cercanía, se elige la de menor umbral \(A\) y, si persiste, a Sol. El valor faltante es \(X = A + 1 - T_i\).
    • Calor: Si no hubo frío, se activa si \(T_i \geq B\). Se sigue una lógica de desempate similar con los umbrales \(B\). El valor faltante es \(X = T_i - (B - 1)\).
    • Bien: Si no se cumplen las anteriores, se calcula la distancia mínima hacia los umbrales de frío y calor de ambas perritas usando la fórmula: \[MinFrio = \min(T_i - AS, T_i - AL)\] \[MinCalor = \min(BS - T_i, BL - T_i)\] \[X = \min(MinFrio, MinCalor)\]
  2. Ordenamiento: Para el segundo bloque, se debe utilizar un comparador que evalúe los criterios en el siguiente orden de prioridad:

    1. Temperatura (\(T_i\)) de menor a mayor.
    2. Tipo de sensación: Frío < Bien < Calor.
    3. Sujeto: Sol < Luna < Ninguna.
    4. Orden original de aparición (índice \(i\)).

Implementación en C++

Sol_y_Luna_en_Nochebuena.cpp


Complejidad
  • Tiempo: \(O(N \log N)\) debido al proceso de ordenamiento de los \(N\) momentos. La simulación de cada momento individual es \(O(1)\).
  • Memoria: \(O(N)\) para almacenar las estructuras de datos y los mensajes de cada uno de los \(N\) momentos antes de imprimirlos.

Comments

There are no comments at the moment.