Python--ZOJ1037

ZOJ1037

        这题是求最短路径的,看起来像图论中的最小生成树的问题但实际上非常简单。题目的结点组成的是矩形,所以要以最短路径遍历每个结点就相当于沿着一个大矩形的边遍历,其长度就是矩形的周长。但是如果结点个数为奇数组成的矩形就有一个斜边,其长度为sqrt(2)。

        结点数位偶数个,最短路径即为所有短边的和,sum = a*b:

        结点数为奇数个,最短路径即为n-1条短边加上一条斜边,sum = a*b-1+sqrt(2):

python代码,注意事项全都加到注释中:

# -*- coding: utf-8 -*-

import sys
import math

n = int(raw_input()) #也可以写成n = input()
count = 1
while n:
    num = sys.stdin.readline() #也可以写成num = raw_input()
    l = num.split()
    a = float(l[0]) #因为题目最后输出的是小数,所以在这里转化为float类型,但实际上应该没什么影响
    b = float(l[1])
    if (a*b)%2 == 0:
        s = a*b
    else:
        s = a*b-1+math.sqrt(2)
    print 'Scenario #%d:' % count #这种输出方式跟C语言及其类似
    print '%.2f\n' % s #以及这种保留小数的方式
    n -= 1
    count += 1
    
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值