Veredictos y puntuación
Esta página documenta todos los tipos de veredicto emitidos por el sistema de jueces omegaUp y explica los diferentes modelos de puntuación disponibles para concursos y problemas.
Tipos de veredicto
Veredictos de éxito
| Veredicto | Código | Descripción |
|---|---|---|
| Aceptado | AC |
Todos los casos de prueba pasaron |
| Parcialmente aceptado | PA |
Algunos casos de prueba pasaron |
Veredictos de respuesta incorrecta
| Veredicto | Código | Descripción |
|---|---|---|
| Respuesta incorrecta | WA |
El resultado no coincide con lo esperado |
| Error de presentación | PE |
Problemas con el formato de salida (espacios en blanco adicionales, etc.) |
Veredictos en tiempo de ejecución
| Veredicto | Código | Descripción |
|---|---|---|
| Error de tiempo de ejecución | RTE |
El programa falló (error de segmento, excepción, etc.) |
| Límite de tiempo excedido | TLE |
Límite de tiempo excedido |
| Límite de memoria excedido | MLE |
Límite de memoria excedido |
| Límite de salida excedido | OLE |
Se genera demasiada producción |
| Función restringida | RFE |
Llamada al sistema prohibida usada |
Veredictos de compilación
| Veredicto | Código | Descripción |
|---|---|---|
| Error de compilación | CE |
No se pudo compilar |
Veredictos del sistema
| Veredicto | Código | Descripción |
|---|---|---|
| Error del juez | JE |
Error de calificación interno |
| Error del validador | VE |
El validador personalizado falló |
Jerarquía de veredictos
Cuando varios casos de prueba tienen veredictos diferentes, el veredicto general sigue esta prioridad:
flowchart TD
JE[Judge Error] --> VE[Validator Error]
VE --> CE[Compilation Error]
CE --> RFE[Restricted Function]
RFE --> MLE[Memory Limit Exceeded]
MLE --> OLE[Output Limit Exceeded]
OLE --> TLE[Time Limit Exceeded]
TLE --> RTE[Runtime Error]
RTE --> WA[Wrong Answer]
WA --> PE[Presentation Error]
PE --> PA[Partial Accepted]
PA --> AC[Accepted]
Modelos de puntuación
Todo o nada (all_or_nothing)
Puntos otorgados sólo por la solución completa:
Score = 100% if ALL cases pass
Score = 0% otherwise
Crédito parcial (partial)
Puntos proporcionales a los casos superados:
Score = (passing_cases / total_cases) × max_points
Máximo por grupo (max_per_group)
Puntos basados en grupos de casos de prueba:
Group Score = max_points × (passing_cases_in_group / total_cases_in_group)
Total Score = sum(Group Scores weighted by group weights)
Grupos de casos de prueba
Definición de grupo
Los grupos se definen en settings.json o se deducen de los nombres de archivos:
{
"Cases": [
{
"Name": "small",
"Cases": ["1", "2", "3"],
"Weight": 30
},
{
"Name": "large",
"Cases": ["4", "5", "6"],
"Weight": 70
}
]
}
Agrupación automática
Sin grupos explícitos, los casos se agrupan por prefijo de nombre de archivo:
small.1.in → Group "small"
small.2.in → Group "small"
large.1.in → Group "large"
large.2.in → Group "large"
Archivo del plan de prueba
Agrupación alternativa vía testplan:
# Format: group_name weight
small 30
large 70
# Test cases (order matters for display)
small.1
small.2
small.3
large.1
large.2
large.3
Modelos de penalización
Sin penalización (none)
La puntuación se basa exclusivamente en la corrección:
Final Score = Best Score
Penalización de tiempo de ejecución (runtime)
Puntuación penalizada por tiempo de ejecución:
Final Score = Points × (1 - time_factor)
time_factor se basa en el tiempo de ejecución relativo.
Penalización por recuento de envíos (submission_count)
Penalización estilo ICPC:
Penalty = Σ(wrong_submissions × penalty_minutes + solve_time)
Puntuación del concurso
Estilo IOI
- Crédito parcial permitido
- El mejor envío cuenta
- No hay penalización por envío incorrecto
Total = Σ(max_score_per_problem)
Estilo CIPC
- Todo o nada por problema
- Tiempo + penalización por envío incorrecto
- Problemas que valen la misma puntuación.
Solved = count(AC_problems)
Penalty = Σ(solve_time + wrong_attempts × 20)
Rank by: Solved DESC, Penalty ASC
Puntuación personalizada
Configurable por concurso:
| Configuración | Opciones |
|---|---|
score_mode |
all_or_nothing, partial, max_per_group |
penalty |
none, runtime, submission_count |
penalty_calc_policy |
sum, max |
Visualización del marcador
Representación de puntuación
| Formato | Ejemplo | Cuando se usa |
|---|---|---|
| Puntos | 100.00 |
Puntuación parcial |
| Fracción | 3/5 |
Todo o nada |
| Hora | 45:30 |
Penalización del CIPC |
| Combinado | 100 (+2) |
IOI con intentos |
Codificación de colores
| Color | Significado |
|---|---|
| 🟢 Verde | Aceptado / Puntuación completa |
| 🟡 Amarillo | Puntuación parcial |
| 🔴 Rojo | Sin puntuación / Respuesta incorrecta |
| ⚪ Gris | Pendiente de sentencia |
Detalles del veredicto
Señales de error en tiempo de ejecución
| Señal | Descripción |
|---|---|
| SIGSEGV (11) | Fallo de segmentación |
| SIGFPE (8) | Excepción de coma flotante |
| SIGABRT (6) | Abortar (aserción fallida) |
| SIGKILL (9) | Asesinado por el sistema |
Notas sobre el límite de tiempo
- Tiempo de CPU: tiempo de cálculo real
- Wall Time: tiempo real transcurrido (normalmente 2× límite de CPU)
- TLE puede resultar de:
- Algoritmo lento
- Bucle infinito
- E/S excesiva
Notas sobre el límite de memoria
- Medido a través de cgroups (RSS máximo)
- Incluye:
- Asignaciones de montón
- Uso de la pila
- Variables estáticas
- NO incluye:
- Bibliotecas compartidas
- segmento de código
Validadores personalizados
Interfaz del validador
Los validadores personalizados reciben:
./validator <input_file> <expected_output> <user_output> <score_limit>
<score>
<message>
score está entre 0,0 y 1,0.
Casos de uso
- Tolerancia de punto flotante
- Múltiples salidas válidas
- Verificación interactiva
- Lógica de crédito parcial
Mejores prácticas
Para quienes plantean problemas
- Utilice grupos significativos: casos de prueba relacionados con grupos
- Equilibrar pesos: asegúrese de que las subtareas tengan la dificultad adecuada
- Incluir casos extremos: condiciones de contorno de prueba
- Establezca límites apropiados: no establezca límites demasiado estrictos ni demasiado flexibles
Para concursantes
- Verifique todos los veredictos: lea atentamente los mensajes de veredicto
- Comprender la puntuación: saber si hay crédito parcial disponible
- Optimizar incrementalmente: obtenga primero una puntuación parcial y luego optimice
- Esté atento a los casos extremos: fuente común de WA
Documentación relacionada
- Grader Internals - Cómo se determinan los veredictos
- Runner Internals - Detalles de ejecución
- API de problemas - Configuración de problemas
- API de concursos - Configuración de puntuación del concurso