#堀江伸一会津大学オンラインジャッジ問0265 Cats Going Straightに挑戦するコード
#少し難しい問題なので気が向いた日に少しずつ記述する
#まだ書き始めこの問題難しいのに36人も合格してるのか
#Ruby言語で合格してる人はいない様子、私が最初のRuby言語での合格者を目指す
def g(x1,y1,x2,y2)
return x1*y2-x2*y1
end
def f2(x1,y1,x2,y2,x3,y3,x4,y4)
res=[]
if 0<g(x4,y4,x1,y1) || 0<g(x2,y2,x3,y3) then
return res
end
end
def f(n)
xs=[]
ys=[]
n.times{|i|
x,y=gets.split(" ").map{|e| e.to_i}
xs<<x
ys<<y
}
n.times{|i|
xs2=[0]*n
ys2=[0]*n
n.times{|j|
p1=(i+j)%n
xs2[p1]=xs[p1]-xs[i]
ys2[p1]=ys[p1]-ys[i]
}
lx=[0]*n
ly=[0]*n
rx=[0]*n
ry=[0]*n
x=xs2[(i+1)%n]
y=ys2[(i+1)%n]
1.upto(n-2){|j|
p1=(i+j)%n
if 0<g(x,y,xs2[p1],ys2[p1]) then
x=xs2[p1]
y=ys2[p1]
end
lx[p1]=x
ly[p1]=y
}
x=xs2[(i+n-1)%n]
y=ys2[(i+n-1)%n]
2.upto(n-1){|j|
p1=(i+n-j)%n
p2=(p1+1)%n
if g(x,y,xs2[p2],ys2[p2])<0 then
x=xs2[p2]
y=ys2[p2]
end
rx[p1]=x
ry[p1]=y
}
hsNow={}
}
end
while true
n=gets.to_i
break if n==0
f(n)
end
I+WggOaxn+S8uOS4gOS8mua0peWkp+WtpuOCquODs+ODqeOCpOODs+OCuOODo+ODg+OCuOWVjzAyNjUgQ2F0cyBHb2luZyBTdHJhaWdodOOBq+aMkeaIpuOBmeOCi+OCs+ODvOODiQoj5bCR44GX6Zuj44GX44GE5ZWP6aGM44Gq44Gu44Gn5rCX44GM5ZCR44GE44Gf5pel44Gr5bCR44GX44Ga44Gk6KiY6L+w44GZ44KLCiPjgb7jgaDmm7jjgY3lp4vjgoHjgZPjga7llY/poYzpm6PjgZfjgYTjga7jgaszNuS6uuOCguWQiOagvOOBl+OBpuOCi+OBruOBiwojUnVieeiogOiqnuOBp+WQiOagvOOBl+OBpuOCi+S6uuOBr+OBhOOBquOBhOanmOWtkOOAgeengeOBjOacgOWIneOBrlJ1YnnoqIDoqp7jgafjga7lkIjmoLzogIXjgpLnm67mjIfjgZkKZGVmIGcoeDEseTEseDIseTIpCglyZXR1cm4geDEqeTIteDIqeTEKZW5kCgpkZWYgZjIoeDEseTEseDIseTIseDMseTMseDQseTQpCglyZXM9W10KCWlmIDA8Zyh4NCx5NCx4MSx5MSkgfHwgMDxnKHgyLHkyLHgzLHkzKSB0aGVuCgkJcmV0dXJuIHJlcwoJZW5kCgkKCQplbmQKZGVmIGYobikKCXhzPVtdCgl5cz1bXQoJbi50aW1lc3t8aXwKCQl4LHk9Z2V0cy5zcGxpdCgiICIpLm1hcHt8ZXwgZS50b19pfQoJCXhzPDx4CgkJeXM8PHkKCX0KCW4udGltZXN7fGl8CgkJeHMyPVswXSpuCgkJeXMyPVswXSpuCgkJbi50aW1lc3t8anwKCQkJcDE9KGkraiklbgoJCQl4czJbcDFdPXhzW3AxXS14c1tpXQoJCQl5czJbcDFdPXlzW3AxXS15c1tpXQoJCX0KCQlseD1bMF0qbgoJCWx5PVswXSpuCgkJcng9WzBdKm4KCQlyeT1bMF0qbgoJCXg9eHMyWyhpKzEpJW5dCgkJeT15czJbKGkrMSklbl0KCQkxLnVwdG8obi0yKXt8anwKCQkJcDE9KGkraiklbgoJCQlpZiAwPGcoeCx5LHhzMltwMV0seXMyW3AxXSkgdGhlbgoJCQkJeD14czJbcDFdCgkJCQl5PXlzMltwMV0KCQkJZW5kCgkJCWx4W3AxXT14CgkJCWx5W3AxXT15CgkJfQoJCXg9eHMyWyhpK24tMSklbl0KCQl5PXlzMlsoaStuLTEpJW5dCgkJMi51cHRvKG4tMSl7fGp8CgkJCXAxPShpK24taiklbgoJCQlwMj0ocDErMSklbgoJCQlpZiBnKHgseSx4czJbcDJdLHlzMltwMl0pPDAgdGhlbgoJCQkJeD14czJbcDJdCgkJCQl5PXlzMltwMl0KCQkJZW5kCgkJCXJ4W3AxXT14CgkJCXJ5W3AxXT15CgkJfQoJCWhzTm93PXt9Cgl9CgkJCmVuZAoKd2hpbGUgdHJ1ZQoJbj1nZXRzLnRvX2kKCWJyZWFrIGlmIG49PTAKCWYobikKZW5k