Juzgado Especial (Special Judge)

Here is where you should report any bugs detected in the COJ. Our development team will take care of them as soon as possible.
Forum rules
Please, do not reply to an existing thread to report a new bug. Open a new thread instead. Also, please check the existing bug reports before posting a new one.
Post Reply
User avatar
ymondelo20
Posts: 1968
Joined: 6 years ago
Location: Universidad de las Ciencias Informáticas
Gender: None specified
Contact:

Juzgado Especial (Special Judge)

Post by ymondelo20 » 3 years ago

Hola a todos,

Debido a la implementación del nuevo motor y algunos cambios que se han ido incorporando para mejorar funcionalidades asociadas a este, los problemas que cuentan con Juzgado Especial [aquellos que muestran algo parecido a un martillo a la derecha del título] deben ser revisados pues los ficheros de validación de las soluciones pueden ser incompatibles con el motor actual.

En los próximos días estaré revisando cada uno de estos problemas y arreglando los que no funcionen... iré actualizando en este POST los que queden listos, aunque en lo adelante tendré que desactivar algunos problemas temporalmente mientras los arreglo. Al mismo tiempo cuando queden corregidos, rejuzgaré todos los envíos que considere necesario pues pudieran tener veredictos incorrectos (fundamentalmente las submisiones de los últimos meses).

A continuación un listado de los problemas en esta categoría (resaltados los que ya están arreglados):
1503, 2080, 2092, 2093, 2095, 2096, 2097, 2099, 2102, 2103,
2107, 2108, 2109, 2112, 2113, 2161, 2165, 2170, 2172, 2174,
2176, 2294, 2298, 2325, 2328, 2478, 2489, 2490
, 2500, 2510,
2518
, 2536, 2540, 2599, 2602, 2674, 2760, 2970, 2971,
2972, 2980, 2981, 2985, 2987, 2988
, 3043...

Saludos...


"Every problem has a simple, fast and wrong solution" OJ's Main Law. ;)

User avatar
ymondelo20
Posts: 1968
Joined: 6 years ago
Location: Universidad de las Ciencias Informáticas
Gender: None specified
Contact:

Re: Juzgado Especial (Special Judge)

Post by ymondelo20 » 3 years ago

El problema 2500 hay que hacer el validador desde cero, así que demorará un poco.
No obstante, si alguien desea ayudar puedo darle algunos ejemplos de como se hace un validador y que lo disfrute jeje.

El 2536 debo revisarlo mejor antes de publicarlo... y los que ya marqué como revisados, si alguien detecta algún error que lo escriba en el post correspondiente o acá.

Siempre puedo facilitar (publicar en este foro o por correo) los códigos de los validadores, y ustedes mismos pueden revisar si tienen algo mal; no es más complicado que resolver el propio problema.

Saludos.
"Every problem has a simple, fast and wrong solution" OJ's Main Law. ;)

HaZard
Posts: 113
Joined: 4 years ago
Location: Camagüey - Cuba
Gender: Male
Contact:

Re: Juzgado Especial (Special Judge)

Post by HaZard » 3 years ago

me gustaría ayudar con eso, aunque no sé cuán complicado pueda ser, si me puedes explicar...
teruel

User avatar
ymondelo20
Posts: 1968
Joined: 6 years ago
Location: Universidad de las Ciencias Informáticas
Gender: None specified
Contact:

Re: Juzgado Especial (Special Judge)

Post by ymondelo20 » 3 years ago

Hola HaZard:
A continuación mi código de validación, en C++, para el problema 2988.
No tiene aceptados (es de la final mundial) pero resulta un buen ejemplo en este caso.

Code: Select all

using namespace std;
#include<algorithm>
#include<stdio.h>
#include<math.h>
char cad[1001];
int n, d, posx[105], posy[105];
int s, cs, arr[105];

int GetDIST(int p, int q)
{
 return (posx[p]-posx[q])*(posx[p]-posx[q]) + (posy[p]-posy[q])*(posy[p]-posy[q]);
}

bool FinalCheck()
{
 for(int p = 1; p <= s; p++)
 for(int q = p + 1; q <= s; q++)
 if(GetDIST(p, q) > d) return false;
 return true;
}

int main(int argc, char *argv[])
{
 FILE *in=fopen(argv[1],"r"); //Leyendo entrada del servidor...
 FILE *out=fopen(argv[2],"r"); //Leyendo la salida del usuario...
 FILE *cout=fopen(argv[3],"r"); //Leyendo la salida correcta del servidor...

 fscanf(in,"%d%d",&n,&d); d = d*d; // d ^ 2
 for(int p = 1; p <= n; p++) fscanf(in,"%d%d",&posx[p],&posy[p]); // initial positions

 fscanf(cout,"%d",&cs);
 if(1 != fscanf(out,"%d",&s))
 { fprintf(stderr,"Input Missing"); return 201; } //No hay nada que leer...
 
 if(cs != s) { fprintf(stderr,"Wrong Answer"); return 201; } //Invalid Solution

 for(int p = 1; p <= s; p++)
 if(1 != fscanf(out,"%d",&arr[p]))
 { fprintf(stderr,"Input Missing"); return 201; } //No hay nada que leer...
 
 if(1 == fscanf(out,"%s",&cad))
 { fprintf(stderr,"Trash in Output"); return 201; } //Basura restante en la salida...
 
 if(!FinalCheck()) { fprintf(stderr,"Wrong Answer"); return 201; } //Wrong Selection
 
 fprintf(stderr,"Accepted"); //Todo OK...
 return 200;
}
El código de validación es como cualquier otro código del lenguaje. La diferencia es que lee inicialmente tres ficheros que se le pasan como parámetro al ejecutable luego, está en los comentarios. Toda la validación se hace sobre la información que se recoje de esos ficheros. Y en ocasiones el fichero de salida del servidor no tiene por qué contener toda la solución, sino solo lo que necesita el validador para comprobar.

Siempre que se detecte un veredicto incorrecto de "Wrong Answer" se imprime un mensaje de error con una descripción arbitraria del veredicto, y se debe retornar 201 (en lugar del return 0 acostumbrado). Si fiera Aceptado, el mensaje de error debe ser exactamente "Accepted", y el código de retorno 200. Solo se puede variar la descripción del error en caso del veredicto "Wrong Answer"; los otros si son palabras estrictas.

Por último si se decide validar el formato, y se detecta que es incorrecto, se puede dar un veredicto de Presentation Error.
En ese caso el mensaje de error debe ser exactamente "Presentation Error", y el código de retorno 202.

Eso es todo.
Saludos.
"Every problem has a simple, fast and wrong solution" OJ's Main Law. ;)

HaZard
Posts: 113
Joined: 4 years ago
Location: Camagüey - Cuba
Gender: Male
Contact:

Re: Juzgado Especial (Special Judge)

Post by HaZard » 3 years ago

estoy viendo como hacer un validador para el ejercicio 1503, que debe ser bastante fácil, en los demás no sé porque están deshabilitados y no los puedo ver, de todas formas a donde mando el validador?
teruel

HaZard
Posts: 113
Joined: 4 years ago
Location: Camagüey - Cuba
Gender: Male
Contact:

Re: Juzgado Especial (Special Judge)

Post by HaZard » 3 years ago

me quedó así, no sé cómo comprobar si está bien o está mal así que lo dejo aquí:

Code: Select all

#include <bits/stdc++.h>

using namespace std;

#define abs(a) ((a) < 0 ? -(a) : (a))

const double eps = 1e-2;

int main(int argc, char *argv[]) {
    FILE *in = fopen(argv[1], "r"); //Leyendo entrada del servidor...
    FILE *out = fopen(argv[2], "r"); //Leyendo la salida del usuario...
    FILE *good = fopen(argv[3], "r"); //Leyendo la salida correcta del servidor...

    int n;
    double sol, server_sol;

    fscanf(in, "%d", &n);
    for(int p = 1; p <= n; p++) {
        fscanf(good, "%lf", &server_sol);
        if(fscanf(out, "%lf", &sol) == EOF) {
            fprintf(stderr, "Input Missing");    //No hay nada que leer...
            return 201;
        }
        if(abs(sol - server_sol) > eps) {
            fprintf(stderr, "Wrong Answer");    //Invalid Solution
            return 201;
        }
    }

    char cad[100001];
    if(1 == fscanf(out, "%s", &cad)) {
        fprintf(stderr, "Trash in Output");    //Basura restante en la salida...
        return 201;
    }

    fprintf(stderr, "Accepted"); //Todo OK...
    return 200;
}
teruel

Post Reply

Return to “Bugs”