首页 > 试题广场 >

解救小易

[编程题]解救小易
  • 热度指数:26049 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。

输入描述:
第一行为一个整数n(n ≤ 1000),表示超超一共拥有n个陷阱。
第二行有n个整数xi,表示第i个陷阱的横坐标
第三行有n个整数yi,表示第i个陷阱的纵坐标
保证坐标都在草地范围内。


输出描述:
输出一个整数,表示小易最少可能多少秒就落入超超的陷阱
示例1

输入

3
4 6 8
1 2 1

输出

3
import sys 
n = int(sys.stdin.readline().rstrip())
xi = [int(x) for x in sys.stdin.readline().split()]
yi = [int(y) for y in sys.stdin.readline().split()]
track = [0]*n
for i in range(0,n):
    track[i]=xi[i]+yi[i]
print(min(track)-2)
发表于 2021-03-26 12:34:20 回复(0)
n = int(input())
x = input().split()
y = input().split()
length = [(int(x[i])+int(y[i])-2) for i in range(n)] print(min(length))
发表于 2018-12-17 20:20:23 回复(0)
while True:
    try:
        num = int(input())
        x = list(map(int,input().split()))
        y = list(map(int,input().split()))
        result = abs(x[0]-1)+abs(y[0]-1)
        for i in range(1,num):
            result = min(result,abs(x[i]-1)+abs(y[i]-1))
        print(result)
    except Exception:
        break
编辑于 2018-10-22 11:07:16 回复(0)
def distnce(list1,list2):
    return abs(list1[0] - list2[0]) + abs(list1[1] - list2[1])

n = int(input())
X = list(map(int,input().split()))
Y = list(map(int,input().split()))

list1 = [1, 1]
for i in range(n):
    list2 = [X[i], Y[i]]
    if i == 0:
        min_distance = distnce(list1,list2)
    else:
        min_distance = min(min_distance,distnce(list1,list2))
        
print(min_distance)


发表于 2018-09-26 20:47:17 回复(0)
最最简单的做法,直接横纵坐标相加最小值减2就可以,因为:
不论怎么达到陷阱,将路径画出来,做平移使得横向的连在一起,纵向的连在一起就可以发现,
其实就是坐标点的横纵坐标,最后减去初始值(1,1)即可;
n = int(input())
lyst_x = list(map(int, input().split( )))
lyst_y = list(map(int, input().split( )))

a = []
for i in range(n):
    a.append(lyst_x[i]+lyst_y[i])
print(min(a)-2)

发表于 2018-09-02 12:27:18 回复(0)
n=int(input())
x=list(map(int,input().split()))
y=list(map(int,input().split()))
z=[]
for i in range(n):
    z.append(x[i]-1+y[i]-1)
print(min(z))


发表于 2018-08-30 14:08:27 回复(0)
import sys
n=sys.stdin.readline().strip().split()
x=sys.stdin.readline().strip().split()
y=sys.stdin.readline().strip().split()
sub = [0 for i in range(int(n[0]))] for i in range(int(n[0])):
    sub[i]=int(x[i])+int(y[i])-2 min=2000 for i in range(int(n[0])): if sub[i] <min:
        min=sub[i] print(min)


发表于 2018-08-29 23:12:15 回复(0)
import sys
n = int(sys.stdin.readline().strip())
xlab = sys.stdin.readline().strip().split(' ')
xlab = list(map(int, xlab))
ylab = sys.stdin.readline().strip().split(' ')
ylab = list(map(int, ylab))
path = list(map(lambda x,y: x+y, xlab,ylab))
print(sorted(path)[0]-2)


发表于 2018-08-09 20:43:19 回复(0)
Python  2 Line, 实际上一行就足够了
_ = int(input())
print(min(map(lambda x:sum(x) - 2,zip(map(int,input().split()),map(int,input().split())))))

发表于 2018-07-22 17:49:50 回复(3)
import sys
n=int(input())
x=list(map(int,sys.stdin.readline().strip().split()))
y=list(map(int,sys.stdin.readline().strip().split()))
ans=2000
for i in range(n):
    dist=x[i]+y[i]-2
    ans=min(dist,ans)
print(ans)

发表于 2018-05-09 14:42:08 回复(0)

n = int(input())
x = list(map(int, input().split()))
y = list(map(int, input().split()))
A = []
for i in range(n):
A.append(x[i]-1 + y[i]-1)
print(min(A))

发表于 2017-12-16 13:51:11 回复(0)
Python小白,练个手
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys

n = sys.stdin.readline()
xStr = sys.stdin.readline()
x = xStr.split()
yStr = sys.stdin.readline()
y = yStr.split()
# 默认最长步数
minStep = (1000-1) + (1000-1)
for i in range(int(n)):
    minStep = (int(x[i])-1) + (int(y[i])-1) if (int(x[i])-1) + (int(y[i])-1) < minStep else minStep
print minStep

发表于 2017-11-29 11:37:19 回复(0)
python:就是 看陷阱坐标值和与(1,1)的差,即表示步数
def MinStep(lsx,lsy):
    result=[(a1+a2)for (a1,a2) in  zip(lsx,lsy)]
    return min(result)-2
n=int(input())
lsx=map(int,input().split())
lsy=map(int,input().split())
print(MinStep(lsx,lsy))

发表于 2017-11-09 12:23:18 回复(0)