如何在剧院中找到最适合二维阵列的座位安排

时间:2018-01-21 21:55:12

标签: arrays algorithm data-structures 2d best-fit

你经营一家小剧院,每个月都有顾客邮寄预售票的要求。您需要处理这些票务请求,并告诉他们他们的聚会将在哪里或向顾客解释为什么您无法完成订单。

填写订单时,您需要遵循一些规则:

  1. 尽可能多地填写订单
  2. 尽可能靠近前线。
  3. 如果剧院里没有足够的座位来处理派对,请告诉他们“抱歉,我们无法处理您的派对。”
  4. 每一方必须在一个部分中排成一行。如果他们不适合,请告诉他们“打电话给分开派对”。
  5. 您的程序必须解析影院布局和故障单请求列表,并按照与请求相同的顺序生成故障单或说明列表。

    剧院布局由1行或更多行组成。每行由一个或多个由空格分隔的部分组成。

    在剧院布局之后,有一个空行,然后是一个或多个剧院请求。剧院请求由名称后跟空格和请求的票数组成。

    示例输入:

    6 6
    3 5 5 3
    4 6 6 4
    2 8 8 2
    6 6
    
    Smith 2
    Jones 5
    Davis 6
    Wilson 100
    Johnson 3
    Williams 4
    Brown 8
    Miller 12
    

    您的程序必须按照与请求相同的顺序生成标准输出结果,其中包括请求故障单的人员的名称以及故障单的行和部分或说明“抱歉,我们无法处理您的派对“或”召集派对。“

    示例输出:

    ```

    Smith Row 1 Section 1
    Jones Row 2 Section 2
    Davis Row 1 Section 2
    Wilson Sorry, we can't handle your party.
    Johnson Row 2 Section 1
    Williams Row 1 Section 1
    Brown Row 4  Section 2
    Miller Call to split party.
    

1 个答案:

答案 0 :(得分:1)

你应该记下你到目前为止所尝试的内容。无论如何,我认为可以使用以下算法解决。你可以编写相同的代码。

1. Keep track of total_seats.

2. Sort the theater requests based on the number of seats needed (since filling more orders is the priority).

3. For each request :
       if request < total_seats :
           For each row:
               if request < seats_in_row:
                   total_seats -= seats
                   update theater_seat[row][column]
               else:
                  Call to split party. 

       else:
           Sorry, we can't handle your party.