zoukankan      html  css  js  c++  java
  • 牛客网的牛牛跳跃问题

      

    '''
    还是牛牛跳跃问题
    '''
    '''
    [编程题] 数轴
    时间限制:1秒
    空间限制:65536K
    牛牛非常喜欢和朋友们一起玩。
    牛牛有n个朋友当前在一根数轴上,每个朋友当前在整数x[i]坐标位置。
    牛牛向他们发出一个移动的信号,每个朋友就向左或者向右移动s距离(每个朋友的选择是独立的,都可以选择向左或者向右)。
    为了在一起玩耍方便,牛牛希望移动之后最左边的朋友和最右边的朋友距离最近,牛牛想知道最近距离为多少。
    
    例如牛牛有三个朋友分别所在数轴坐标为-7, 4, 7, s = 5
    那么第一个朋友-7向右移动s,变为-2
    第二个朋友4向左移动s,变为-1
    第三个朋友7向左移动s,变为2。
    现在最左和最右的朋友距离是4,没有比这个更优的方案了。 
    输入描述:
    输入包括两行,第一行两个正整数n和s(2 ≤ n ≤ 50, 0 ≤ s ≤ 10^8),表示朋友的个数和移动的距离。
    第二行包括n个正整数x[i](-10^8 ≤ x[i] ≤ 10^8),表示初始时每个朋友所在的坐标位置。
    
    
    输出描述:
    输出一个正整数,表示移动之后最左边的朋友和最右边的朋友最小距离为多少。
    
    输入例子1:
    3 5
    4 -7 7
    
    输出例子1:
    4
    '''
    #跳跃后的数组
    #下面这一段用一个txt来保存input的信息来模拟input.最后提交代码时候删除这一段即可.
    a9999=open('1.txt','r')
    def input():
        return a9999.readline()
    #结束.
    #首先建立跳跃后的所有可能取值的list1 :list1[i]=a,b 表示i号小朋友最后能到的位置是a or b
    list1=[]
    a=[int(i) for i in input().split()]
    num=a[0]
    p=a[1]
    b=[int(i) for i in input().split()]
    for i in range(len(b)):
        list1.append((b[i]-p,b[i]+p))
    
    save=[]
    for i in range(len(list1)):
        for j in range(2):
            
            tmp=list1[i][j]#下面我们讨论的情况是这个tmp如果作为最后的min值来出现那么max值最少该是多少.
            tmp_for_max=tmp#max值至少就是这个min值.
            
            for ii in range(len(list1)):
                if ii==i:
                    continue #不能在上面tmp同一组里面取2个
                
                tmp_max=list1[ii]
                a=tmp_max[0]
                b=tmp_max[1]
                if a<tmp and b<tmp:
                    break
                if a<tmp and b>=tmp:
                    out=b
                if a>=tmp and b<tmp:
                    out=a
                if a>=tmp and b>=tmp:
                    out=min(a,b)
                #为了让max尽可能的小 
                if out>=tmp_for_max:
                    tmp_for_max=out
            else:#不出发for里面的break就是得到了符合要求的所以save一下
                save.append(tmp_for_max-tmp)
    print(min(save))
    
                    
                        
    View Code

     思路就是左神的:遇到数组动态规划问题就想,以什么作为结尾,以什么作为开始,以什么作为最小值,以什么作为最大值,

    用一个以什么最...样来做细化.比如这题目就是用以...作为最小值来做动态规划的细化.从而利用2维动态规划就解决了.其实也就是两个for

  • 相关阅读:
    桃李春风一杯酒,江湖夜雨十年灯
    实现.net下的动态代理(续)多对象Mixin
    队列不存在,或您没有足够的权限执行该操作另一种原因
    .NET托管内存类应用的内存泄漏分析和诊断(转)
    移动硬盘 执行页内操作时的错误修复方法
    阮一峰:四位计算机的原理及其实现
    一款mvvm框架运用介绍(转)
    C#制作CAB压缩包压缩解压类
    ASP.NET C# 向 ACCESS 插入日期型数据 标准表达式中数据类型不匹配
    SQL Server日志清除的两种方法
  • 原文地址:https://www.cnblogs.com/zhangbo2008/p/9238555.html
Copyright © 2011-2022 走看看