蓝桥杯 移动距离 python

简介: 蓝桥杯 移动距离 python

蓝桥杯 移动距离 python


题目


X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为6时,开始情形如下:

1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....


我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)

输出为3个整数w m n,空格分开,都在1到10000范围内

要求输出一个整数,表示m n 两楼间最短移动距离。


样例输入输出


例如:

用户输入:


6 8 2


则,程序应该输出:


4


再例如:

用户输入:


4 7 20


则,程序应该输出:


5


资源约定


峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码处理。


思路


我有两种思路,第一种就是模拟了,就模拟这个矩阵,然后找到这两个位置,这样的方法,当我们的数据量很大的时候,相差很大的时候,我们需要大量的时间和内存模拟这个矩阵,花费了很多时间,但是这样好像也是能够得到结果的。


第二种思路就是找规律,对我们的矩阵,实际上距离就是|y1-y2|+|x1-x2|就得到了,所以首先我们需要得到我们的坐标,我发现一般来说n//w就是行数,但是也有例外,就是n%w为0的时候,所以这种情况要特判。除此之外呢,就是对于行数为奇数的情况也需要进行判断,因为这个时候是反过来的,就需要w-1-n%w得到我们的结果。


接下来就看看代码吧


模拟

w, m, n = map(int,input().split())
y = max(m,n)//w + 1
matrix = []
res = []
for i in range(y):
    temp = [j for j in range(w*i+1, w*(i+1)+1)]
    if i%2 == 0:
        matrix.append(temp)
    else:
        temp = temp[::-1]
        matrix.append(temp)
    if m in temp:
        res.append([temp.index(m),i])
    if n in temp:
        res.append([temp.index(n),i]) 
print(abs(res[0][1]-res[1][1]) + abs(res[0][0]-res[1][0]))

找规律

w,m,n = map(int,input().split())
x1,y1 = m//w,m%w
x2,y2 = n//w,n%w
def change(x,y):
    if y == 0:
        x -= 1
    if x%2 == 1 and y == 0: # 奇数
        y = 0
    elif x%2 == 1:
        y = w - y
    elif y==0:
        y = w - 1
    else:
        y = y - 1
    return x,y
x1,y1 = change(x1, y1)
x2,y2 = change(x2, y2)
print(abs(x1-x2) + abs(y1-y2))


相关文章
|
6月前
|
存储 索引 Python
蓝桥杯系列2——python基本语法
蓝桥杯系列2——python基本语法
68 0
|
4月前
|
索引 Python 容器
【备战蓝桥杯】探索Python内置标准库collections的使用
【备战蓝桥杯】探索Python内置标准库collections的使用
51 1
|
4月前
|
开发者 Python
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
【备战蓝桥杯】如何使用Python 内置模块datetime去计算我与CSDN相遇的天数
33 1
|
4月前
|
算法 测试技术 编译器
蓝桥杯-02-python组考点与14届真题
蓝桥杯-02-python组考点与14届真题
|
4月前
|
Python
第十三届蓝桥杯B组python(试题A:排列字母)
第十三届蓝桥杯B组python(试题A:排列字母)
25 0
|
4月前
|
人工智能 算法 测试技术
第十四届蓝桥杯第三期模拟赛 【python】(二)
第十四届蓝桥杯第三期模拟赛 【python】(二)
|
4月前
|
测试技术 Python
第十四届蓝桥杯第三期模拟赛 【python】(一)
第十四届蓝桥杯第三期模拟赛 【python】(一)
|
4月前
|
人工智能 算法 测试技术
第十四届蓝桥杯第二期模拟赛 【python】
第十四届蓝桥杯第二期模拟赛 【python】
|
6月前
|
机器学习/深度学习 开发者 索引
蓝桥杯系列6——python技巧
蓝桥杯系列6——python技巧
95 0
|
6月前
|
算法 Python
蓝桥杯系列4——python基础练习
蓝桥杯系列4——python基础练习
122 0