3 条题解

  • 1

    数学方法和bfs方法

    准备蓝桥杯,做到这一题之前是没有好好看过bfs的,虽然数据结构课上学过。。。一开始准备dfs解,但是好好想想发现完全不行,于是用数学的方法写了:

    a,b=map(int,input().split())
    bb,sta,s=0,0,0
    bb=b
    sta=b
    count=1
    ss=[1000,1000]
    while sta!=1:
          k=int(sta**0.5)
          sta=k if abs(k**2-sta) < abs((k+1)**2-sta) else k+1
          if sta==1:
                break
          s=abs(sta**2-bb)+s
          ss.append(abs(a-sta)+s+count)
          bb=sta
          count=count+1
    print(abs(min(b-a,min(ss)) ))
    

    这种方法不是很好想,比赛没那个时间,还是bfs好用一点:

    a,b=map(int,input().split())
    l=[(a,0)]
    ch=[1,-1]
    dp=[0]*2000
    for i in range(10000):
          if l[0][0]>2000:
                del(l[0])
                continue
          if l[0][0]<=0:
                del(l[0])
                continue     
          for i in ch:
                if dp[l[0][0]]==0:
                      l.append((l[0][0]+i,l[0][1]+1))
          if dp[l[0][0]]==0:
                l.append((l[0][0]*l[0][0],l[0][1]+1))
          if l[0][0]==b:                            ##终结判定
                print(l[0][1])
                break
          dp[l[0][0]]=1                             ##标记已经删除过,确定不是正确答案的一组
          del(l[0])
    

    信息

    ID
    20971
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    (无)
    递交数
    124
    已通过
    10
    上传者