zoukankan      html  css  js  c++  java
  • SRM145 DIV1 600

    有关vending machine (自动售货机) 的模拟题,需要吐槽的是:能够转的自动售货机?你找一个出来给我看看

    总之,虽然现在觉得意思明白,但是在写代码之前只觉得题目莫名其妙

      1 class VendingMachine:
      2     def motorUse(self, prices, purchases):
      3         machine = Machine(prices)
      4         lastBuyTime = 0
      5 
      6         machine.moveToMaxPrice()
      7         for i in range(0, len(purchases)):
      8             pur = processPurchase(purchases[i])
      9             if pur[2] - lastBuyTime >= 5:
     10                 machine.moveToMaxPrice()
     11             lastBuyTime = pur[2]
     12             if machine.pick(pur[0], pur[1]) == -1:
     13                 return -1
     14         machine.moveToMaxPrice()
     15         
     16         return machine.motoUse()
     17             
     18 
     19 def processPurchase(string):
     20     s1 = string.find(',')
     21     s2 = string.find(':')
     22     shelf = int(string[0:s1])
     23     column = int(string[s1+1:s2])
     24     time = int(string[s2+1:])
     25     return (shelf, column, time)
     26 
     27 
     28 class Machine:
     29     def __init__(self, prices):
     30         self._column = []
     31         self._motoUse = 0
     32         self._curPlace = 0
     33         
     34         totalColumn = len(prices[0].split(' '))
     35         for i in range(0, totalColumn):
     36             self._column.append(Column())
     37             
     38         for shelfIndex in range(0, len(prices)):
     39             string = prices[shelfIndex]
     40             p = string.split(' ')
     41             p = [int(numStr) for numStr in p]
     42             for columnIndex in range(0, len(p)):
     43                 self._column[columnIndex].append(p[columnIndex])                
     44 
     45 
     46     def motoUse(self):
     47         return self._motoUse
     48 
     49 
     50     # 返回-1表示无效
     51     def pick(self, shelfIndex, columnIndex):
     52         price = self._column[columnIndex].pickShelf(shelfIndex)
     53         if price == -1:
     54             return -1
     55         self._moveTo(columnIndex)
     56         return True
     57         
     58     def moveToMaxPrice(self):
     59         place = self._findMaxPrice()
     60         self._moveTo(place)
     61 
     62     def _moveTo(self, place):
     63         self._motoUse += self._countMinMove(place, self._curPlace)
     64         self._curPlace = place
     65         
     66     def _countMinMove(self, place1, place2):
     67         offset = abs(place1 - place2)
     68         return min(offset, len(self._column) - offset)
     69 
     70     def _findMaxPrice(self):
     71         maxNum = -999
     72         index = -999
     73         for i in range(0, len(self._column)):
     74             if self._column[i].totalPrice() > maxNum:
     75                 maxNum = self._column[i].totalPrice()
     76                 index = i
     77         return index
     78 
     79 
     80 class Column:
     81     def __init__(self):
     82         self._totalPrice = 0
     83         self._shelf = []
     84 
     85     def totalPrice(self):
     86         return self._totalPrice
     87 
     88     def pickShelf(self, index):
     89         price = self._shelf[index]
     90         if price == -1:
     91             return -1
     92         else:
     93             self._totalPrice -= price
     94             self._shelf[index] = -1
     95             return price
     96 
     97     def append(self, price):
     98         self._totalPrice += price
     99         self._shelf.append(price)
    100 
    101 
    102 
    103 
    104 
    105 # test
    106 o = VendingMachine()
    107 m = Machine(("100 100 100", ))
    108 assert(len(m._column) == 3)
    109 
    110 
    111 # test case
    112 assert(o.motorUse(("100 100 100", ), ("0,0:0", "0,2:5", "0,1:10")) == 4)
    113 assert(o.motorUse(("100 200 300 400 500 600", ),
    114 ("0,2:0", "0,3:5", "0,1:10", "0,4:15")) == 17)
    115 assert(o.motorUse(("100 100 100", ), ("0,0:10", "0,0:11")) == -1)
    116 assert(o.motorUse(("100 200 300",
    117  "600 500 400"), ("0,0:0", "1,1:10", "1,2:20",
    118  "0,1:21", "1,0:22", "0,2:35")) == 6)
    View Code

     感觉代码写的有点太多了,比赛的时候肯定没时间写

  • 相关阅读:
    shell脚本,批量创建10个系统帐号并设置密码为随机8位字符串。
    shell脚本,在指定目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件。
    shell脚本,按字母出现频率降序排序。
    django 上传图片、使用PIL制作缩略图并保存到sea的storage
    mongo数据库基本操作--python篇
    看懂sh脚本
    推荐系统实践--基于用户的协同过滤算法
    推荐系统实践--概述
    django “如何”系列10:如何管理静态文件
    django “如何”系列9:三合一:利用遗留的数据库、输出csv和输出pdf
  • 原文地址:https://www.cnblogs.com/valaxy/p/3393554.html
Copyright © 2011-2022 走看看