fork download
  1. #会津大学オンラインジャッジ問4044 Wall Renovation 合格コード
  2. def f(h,ds,hs)
  3. ds.each{|e|
  4. return -1 if h<=e
  5. }
  6. ds2=ds.map{|e|
  7. h-e
  8. }
  9. ans=0
  10. hs.zip(ds2).each{|h1,h2|
  11. ans+=(h1-h2).abs
  12. }
  13. return ans
  14. end
  15. def bSearch(l,r,ds,hs)
  16. if l==r then
  17. return f(l,ds,hs)
  18. else
  19. m1=(l+r)/2
  20. m2=m1+1
  21. c1=f(m1,ds,hs)
  22. c2=f(m2,ds,hs)
  23. if c1==-1 && c2==-1 then
  24. return bSearch(m2,r,ds,hs)
  25. elsif c1==-1 then
  26. return bSearch(m2,r,ds,hs)
  27. elsif c2<c1 then
  28. return bSearch(m2,r,ds,hs)
  29. else
  30. return bSearch(l,m1,ds,hs)
  31. end
  32. end
  33. end
  34.  
  35. n=gets.to_i
  36. hs=gets.split(" ").map{|e| e.to_i}
  37. hs2=gets.split(" ").map{|e| e.to_i}
  38. ds=hs2.map{|e|
  39. hs2[0]-e
  40. }
  41. puts bSearch(1,10**12,ds,hs)
Success #stdin #stdout 0.01s 10004KB
stdin
5
8 10 9 13 15
5 9 1 4 2
stdout
18