首页 > 代码库 > ZOJ-3504 P-norm(py大法好)
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.
ZOJ-3504 P-norm(py大法好)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。