京东2017实习生招聘编程题——终结者 python

题目描述
									

收到情报,有批新造的机器人要运输到前线。小C将去破坏机器人的运输。小C将激光炮放置在公路的一旁,等运输车经过的时候发射(假设激光炮一定可以射穿车辆)。由于能源有限,激光炮只能发射两次。可以认为激光炮放在坐标轴的原点处,并向y轴正方向发射。每辆运输车可以看作是一个矩形,起始的x轴坐标为Xi ,所有的车均位于第一象限,长度为Li,速度为1,朝x轴负方向运动。即经过t时间后,该车车头的x坐标为Xi-t,车尾坐标为Xi-t+Li 。只要打中车的任何一个部分就算击中。

请你算算,他在哪两个时刻发射,才能摧毁最多的运输车。

输入

第一行一个正整数 n ( 2≤N≤200 ),表示运输个的数量。

接下来n行,每行两个整数X和L(1≤X、L≤109),表示一辆车的x轴坐标和长度。

样例输入

4

2 2

3 1

5 2
7 3

输出

输出最多可以摧毁的运输车数量。

样例输出

4

# -*- coding: utf-8 -*-
n=raw_input()
n=int(n)
car_dict={}
location=[]
goal_dict={}
goal_count_dict={}
for i in range(n):
    car=raw_input().split(' ')
    left=int(car[0])
    right=int(car[1])+left
    car_dict[i]=[left,right]
    location.append(left)
    location.append(right)
location=sorted(set(location))
for j in location:
    s=[]
    m=0
    for i in range(n):
        if car_dict[i][0]<=j<=car_dict[i][1]:
            s.append(i)
            m=m+1
    if m>0:
        goal_dict[j]=s
        goal_count_dict[j]=m
max_car1=sorted(goal_count_dict.items(), key=lambda d:d[1], reverse = True)[0][0]
max_car2=sorted(goal_count_dict.items(), key=lambda d:d[1], reverse = True)[1][0]
max_cars=len(set(goal_dict[max_car1]+goal_dict[max_car2]))
wait_pair=[]
for i in goal_dict.keys():
    for j in goal_dict.keys():
        if j>i and len(set(goal_dict[i]+goal_dict[j]))>max_cars:
            wait_pair.append(tuple([i,j]))
pair_count=[]
for pair in wait_pair:
    a1=pair[0]
    a2=pair[1]
    s=len(set(goal_dict[a1]+goal_dict[a2]))
    pair_count.append(s)
print max(pair_count)
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值