问题出现在CSAcademy Programming Contest Round 51中。问题陈述如下: - "给定曼哈顿距离a,b和c,在2D空间中产生3个点,使得它们之间的曼哈顿距离满足上述值"。
我的方法
给定的距离应满足: -
(a+b+c)%2==0
原因是: 首先对距离进行排序
a<=b<=c
然后我们有以下
|x2-x1|+|y2-y1|=a
|x3-x2|+|y3-y2|=b
|x3-x1|+|y3-y2|=c
现在,如果3点有x1,x2,x3,y1,y2,y3坐标,那么: -
x1<=x2<=x3
y1<=y2<=y3
然后我们可以安全地打开模数来获得: -
2*(x3-x1)+2*(y3-y1)=a+b+c
此后,我修复了(0,0)和(a,0),并得出第3点为: -
x3=(a+b-c)/2
y3=(b+c-a)/2
但是,我无法在比赛中解决,因为我没有注意到排序后的事实
a+b>=c should hold (Triangle inequality over Manhattan Distance)
相同here的代码。
因此,我的问题如下: -
答案 0 :(得分:1)
我认为这意味着你所产生的要点不符合基本要求。
我认为没有明确要求这些点满足三角不等式,这只是一个新兴属性。
假设a = 0,b = 2,c = 4.
您的方法将产生分数:
x1,y1 = 0,0
x2,y2 = 0,0
x3,y3 = -1,3
现在距离1到2是0,距离2到3是4,但距离1到3也是4.
提到三角不等式的原因是,在这种情况下,你可以立即证明由于这种不等式而没有解决方案。
三角形不等式将适用于距离度量,其中距离被定义为受约束的最短路径。这是因为它相当于说“从a到b到c”总是至少和“直接从a到c”一样长。