SPJ有误
查看原帖
SPJ有误
60075
pzc2004楼主2022/2/22 23:05

当前的 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;
}
2022/2/22 23:05
加载中...