內容 :
對現代人而言,幽默感是社交生活非常重要的元素。
但時常我們講了一些自以為幽默的話,卻反而遭人白眼,這就是缺乏笑點 ( Ha-Ha point ) 的緣故。
至於笑點如何產生呢?
其實每個人的心中都有所謂的梗 ( pioneerLike ) ,當兩個人的梗交會時,我們就稱那個交點為笑點。(只有端點接觸也算交會)
現在給你N個同學(編號為 1 ~ N )的梗,並有一些詢問,請你對於每個詢問,計算出笑點在哪。
但時常我們講了一些自以為幽默的話,卻反而遭人白眼,這就是缺乏笑點 ( Ha-Ha point ) 的緣故。
至於笑點如何產生呢?
其實每個人的心中都有所謂的梗 ( pioneerLike ) ,當兩個人的梗交會時,我們就稱那個交點為笑點。(只有端點接觸也算交會)
現在給你N個同學(編號為 1 ~ N )的梗,並有一些詢問,請你對於每個詢問,計算出笑點在哪。
輸入說明 :
第 1 行有一個整數 N ( N <= 1000 ),代表共有幾個同學。
以下 N 行,每行有 4 個整數,x1、y1、x2、y2,代表梗是由 ( x1 , y1 ) 到 ( x2 , y2 ) 的線段,這 N 行依序代表 1 ~ N 號同學的梗。
再來 1 行有 1 個整數 Q ( Q <= 10000 ) ,代表共有幾個詢問。
以下 Q 行每行有 2 個整數 a 和 b ,代表詢問同學 a 和同學 b 的笑點(兩個人的梗的交點就是笑點。),這 Q 行每行代表 1 個詢問。
所有的輸入都在 int 的範圍內。
以下 N 行,每行有 4 個整數,x1、y1、x2、y2,代表梗是由 ( x1 , y1 ) 到 ( x2 , y2 ) 的線段,這 N 行依序代表 1 ~ N 號同學的梗。
再來 1 行有 1 個整數 Q ( Q <= 10000 ) ,代表共有幾個詢問。
以下 Q 行每行有 2 個整數 a 和 b ,代表詢問同學 a 和同學 b 的笑點(兩個人的梗的交點就是笑點。),這 Q 行每行代表 1 個詢問。
所有的輸入都在 int 的範圍內。
輸出說明 :
請針對每個詢問輸出笑點的座標,四捨五入到小數後3位。
如果詢問中 2 位同學的梗沒有交會,請輸出 "no humor" 。
如果詢問中 2 位同學有無限多個笑點,請輸出 "HAHAHAHAHA!" 。
輸出皆不含引號。
如果詢問中 2 位同學的梗沒有交會,請輸出 "no humor" 。
如果詢問中 2 位同學有無限多個笑點,請輸出 "HAHAHAHAHA!" 。
輸出皆不含引號。
範例輸入 :
5
3 10 1 1
3 2 -2 2
1 1 -3 4
5 -2 -3 4
3 10 3 2
4
1 2
2 3
3 4
4 5
範例輸出 :
1.222 2.000
-0.333 2.000
HAHAHAHAHA!
no humor
線段交點吧,先取兩線的交點,再看是不是在線段內,就可以了吧。
回覆刪除Dim mx(1000) As Integer
回覆刪除Dim my(1000) As Integer
Dim c(1000) As Integer
Dim xxx1(1000) As Integer
Dim yyy1(1000) As Integer
Dim xxx2(1000) As Integer
Dim yyy2(1000) As Integer
Public Sub Form_Load()
Me.Hide
Open App.Path & "/in.txt" For Input As #1
Open App.Path & "/out.txt" For Output As #2
Input #1, n
For i = 1 To n
Input #1, X1, Y1, X2, Y2
If X1 > X2 Then
xxx1(i) = X1: xxx2(i) = X2
Else
xxx1(i) = X2: xxx2(i) = X1
End If
If Y1 > Y2 Then
yyy1(i) = Y1: yyy2(i) = Y2
Else
yyy1(i) = Y2: yyy2(i) = Y1
End If
my(i) = -(X2 - X1)
mx(i) = Y2 - Y1
c(i) = mx(i) * X1 + (my(i) * Y1)
Next i
Input #1, n
For i = 1 To 4
Input #1, n1, n2
qq = mx(n1) * my(n2) - (my(n1) * mx(n2))
qx = c(n1) * my(n2) - (my(n1) * c(n2))
qy = mx(n1) * c(n2) - (c(n1) * mx(n2))
If qq = 0 Then
If qx = qy And qy = 0 Then
Print #2, "HAHAHAHAHA!"
Else
Print #2, "no humor"
End If
Else
x = qx / qq
y = qy / qq
If x <= xxx1(n1) And x >= xxx2(n1) And y <= yyy1(n1) And y >= yyy2(n1) Then
If x <= xxx1(n2) And x >= xxx2(n2) And y <= yyy1(n2) And y >= yyy2(n2) Then
Print #2, Format(x, "#0.000"), Format(y, "#0.000")
Else
Print #2, "no humor"
End If
Else
Print #2, "no humor"
End If
End If
Next i
Close #2
Close #1
End
End Sub
by Yung