当前的 SPJ 是直接根据答案文件来判断的,然而实际上需要根据输入文件来判断答案到每个点的距离是否合法
这是 loj 的 SPJ
// checker.cpp: adapted from vector/output_validators/wg/validate.cpp
// Author: HeRaNO
#include "testlib.h"
typedef std::vector<double> vd;
typedef std::vector<vd> vvd;
const double eps = 1.1e-5;
void check_vector(int i, int D, const vd &a, const vd &b)
{
double distance = 0.0;
for (int d = 0; d < D; d++)
distance += (a[d] - b[d]) * (a[d] - b[d]);
distance = sqrt(distance);
double error = abs(distance - a[D]);
if (abs(a[D]) > 1)
error /= abs(a[D]);
if (error > eps)
quitf(_wa, "distance to vector %d should be %.17f but is %.17f, error %.17f\n", i + 1, a[D], distance, error);
return ;
}
int main(int argc, char *argv[])
{
registerTestlibCmd(argc, argv);
int D = inf.readInt();
int n = inf.readInt();
vvd v(n, vd(D + 1));
for (vd &row: v)
for (double &x: row)
x = inf.readDouble();
vd out(D);
for (int i = 0; i < D; i++)
out[i] = ouf.readDouble();
for (int i = 0; i < n; i++)
check_vector(i, D, v[i], out);
quitf(_ok, "ok");
return 0;
}