ZOJ-3504 P-norm(py大法好)

昨天下午訓練選用的是ZOJ月賽watashi大神出的題目(記得第一次接觸watashi的時候是學習怎麼寫oj提交機器人,雖然看不懂,但是最後用py大法完美解決了。)

題目Link : http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3504

這題目,用c++我覺得寫起來很費勁,說到底就是計算p範數。

有3行輸入,比如

(1,0) (0,1) (-1,0) (0,-1)
(1,0) (0,-1) (-1,0) (0,1)
1
我們計算:

1.第一二行對應兩個括號形成的向量的模,比如(a,b)對應(c,d),其模爲sqrt( (a-c)^2+(b-d)^2)

2.將每個模求其p次方(對應的是第三行的整數),求和

3.對總和開p次根

現在最麻煩的是處理這些括號,因爲不確定個數,用c/c++,大概就是用(%lf,%lf)作爲讀入標誌比較好。

但是,zoj是支持py的,真高興啊,而py則可以用非常簡單第代碼完成這個步驟,只需要讀取三行,對一二行進行正則,十分簡單,最後只需要用20行多點就完成題目。


from re import compile
from math import pow,sqrt
import sys
pt=compile(r'\((.*?),(.*?)\)')
while 1:
    line=sys.stdin.readline()
    if len(line)>1:
        line2=sys.stdin.readline()
        p=float(sys.stdin.readline())
        res1=pt.findall(line)
        res2=pt.findall(line2)
        x=[]
        y=[]
        ans=0.0
        for i in range(len(res1)):
            x.append(float(res1[i][0])-float(res2[i][0]))
            y.append(float(res1[i][1])-float(res2[i][1]))
        for i in range(len(x)):
            ans+=pow(sqrt(x[i]**2+y[i]**2),p)
        print '%.08f'%pow(ans,1.0/p)
    else:
        break


人生苦短,我用py.



發佈了123 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章