loj#P6803. 「ICPC World Finals 2020」胜利者,我们的向量是什么?

「ICPC World Finals 2020」胜利者,我们的向量是什么?

题目描述

向量嵌入(Vector embeddings)是一个机器学习系统中通用的工具。真实世界中复杂的概念(例如,词典中的单词)都会被映射到一个实向量上。如果这个 embedding 训练得好,在向量空间中相关的概念就会距离较近,这样形如「这两个单词是同义词吗?」的问题就会规约到一个简单的数学判断了。

你已加入 Ye Olde Ice Cream Shoppe 并为他们训练一个冰激凌口味的 embedding 模型,这样当某种口味的冰激凌买完的时候,就可以为顾客推荐一款相关的口味。你用了六个云计算中心,花了四个月训练你的模型,终于训练出了完美的口味模型!你已经准备好对你所在的街道,我们敢说可以对你的社区,的冰淇淋产业进行革新!直到你不小心把一些融化的免费冰激凌滴到了键盘上,然后不小心删了一半的数据。重新训练模型需要花费 300 亿卢布,你的公司负担不起,所以你犯了难。

幸运的是,你仍然有许多不同的训练结果。对于确定的一个已经删掉的向量,训练数据会告诉你它离一些已知的口味向量有多近。向量 AABB 有多近是用标准欧几里得距离度量来描述的(也就是说,向量 ABA-B 的长度)。写一个工具重建这个嵌入模型,满足它与训练结果一致。

输入格式

第一行包含两个整数 ddnn,其中 d (1d500)d\ (1\le d\le 500) 是向量的维数,n (1n500)n\ (1\le n\le 500) 是训练结果的个数,你需要根据这些训练结果重建一个已删除的嵌入向量。

接下来 nn 行用 d+1d+1 个数 x1,,xdx_1,\ldots ,x_dee 描述一组训练结果。在训练结果中,x1,,xd (100xi100)x_1,\ldots ,x_d\ (-100\le x_i\le 100) 是一个已知向量的坐标,e (0e5000)e\ (0\le e\le 5000) 是这个向量与被删除向量之间的距离。

你的程序只会被样例输入和按如下过程生成的数据测试。首先,ddnn 会被选出。然后随机生成 nndd 维输入向量和一个 dd 维输出向量,这 d(n+1)d\cdot(n+1) 个坐标从区间 [100,100][-100,100] 中独立且均匀随机生成。接着计算每个输入向量与输出向量之间的欧几里得距离。最后,输出向量被忽略。计算中使用双精度浮点数。用这种方式生成的数据中所有实数均保留 1717 位小数。

输出格式

输出 dd 个实数,表示一个向量。需要满足这个向量到每个向量的距离与输入中所给的距离的绝对误差或相对误差不超过 10510^{-5}。输出任意一个满足条件的向量均可。

2 3
0 0 2.5
3 0 2.5
1.5 0.5 2.5

1.5 -2

2 2
0 0 2
4 -4 6

1.414213562373 1.414213562373

4 3
0 1 2 3 2
1 2 -1 7 5
1 0.3 3.4 1.2 3.3

1 2 3 4