2010年10月19日 星期二

笑點在哪

內容 : 
對現代人而言,幽默感是社交生活非常重要的元素。
但時常我們講了一些自以為幽默的話,卻反而遭人白眼,這就是缺乏笑點 ( 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 的範圍內。
輸出說明 :
請針對每個詢問輸出笑點的座標,四捨五入到小數後3位。
如果詢問中 2 位同學的梗沒有交會,請輸出 "no humor" 。
如果詢問中 2 位同學有無限多個笑點,請輸出 "HAHAHAHAHA!" 。
輸出皆不含引號。
範例輸入 :
3 10 1 1 
3 2 -2 2 
1 1 -3 4 
5 -2 -3 4 
3 10 3 2 
1 2 
2 3 
3 4 
4 5 
範例輸出 :
1.222 2.000 
-0.333 2.000 
HAHAHAHAHA! 
no humor

2 則留言:

  1. 線段交點吧,先取兩線的交點,再看是不是在線段內,就可以了吧。

    回覆刪除
  2. 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

    回覆刪除