Submission #48799502


Source Code Expand

class SegTree
  attr_accessor(:arr, :size)

  def initialize(n)
    @size = 1<<(n-1).bit_length
    @arr = Array.new(@size*2-1,10**18)
  end

  def update(i,x)
    i += @size - 1
    @arr[i] = x
    while i > 0
      i = (i-1)/2
      @arr[i] = op(@arr[i*2+1], @arr[i*2+2])
    end
  end

  def query(l,r) #[l,r)
    l += @size - 1
    r += @size - 1
    ret_l = 10**18
    ret_r = 10**18
    while l < r
      if l & 1 == 0
        ret_l = op(ret_l, @arr[l])
      end
      if r & 1 == 0
        ret_r = op(@arr[r-1],ret_r)
      end
      l = l/2
      r = (r-1)/2
    end
    return op(ret_l,ret_r)
  end

  def op(a,b) #ここを変える場合、@arrの初期値とquery()内のret_l,ret_rを変える必要があるから注意
    [a,b].min
  end

  def top()
    @arr[0]
  end
end

n,k = gets.split.map(&:to_i)
sx,sy = gets.split.map(&:to_i)
seg = SegTree.new(k+2)
0.upto(k-1) do |i|
  seg.update(i,10**18)
end
now = 0
add = 0
pre_x = 0
pre_y = 0
n.times do |i|
  x,y = gets.split.map(&:to_i)
  if i == 0
    seg.update(now,((x-sx)**2+(y-sy)**2)**0.5)
  else
    tohome = ((x-sx)**2+(y-sy)**2)**0.5
    tohome2 = ((pre_x-sx)**2+(pre_y-sy)**2)**0.5
    val = -((x-pre_x)**2+(y-pre_y)**2)**0.5 + tohome + tohome2
    min = seg.query(0,k)
    seg.update(now,min+val)
    add += ((x-pre_x)**2+(y-pre_y)**2)**0.5
  end
  now += 1
  now %= k
  pre_x = x
  pre_y = y
end
puts seg.query(0,k)+add+((pre_x-sx)**2+(pre_y-sy)**2)**0.5

Submission Info

Submission Time
Task F - Christmas Present 2
User konayuki
Language Ruby (ruby 3.2.2)
Score 550
Code Size 1502 Byte
Status AC
Exec Time 777 ms
Memory 21772 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 550 / 550
Status
AC × 3
AC × 36
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 02_line_00.txt, 02_line_01.txt, 02_line_02.txt, 02_line_03.txt, 02_line_04.txt, 02_line_05.txt, 02_line_06.txt, 02_line_07.txt, 02_line_08.txt, 02_line_09.txt, 03_minmax_00.txt, 03_minmax_01.txt, 03_minmax_02.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 42 ms 17328 KiB
00_sample_01.txt AC 41 ms 17368 KiB
00_sample_02.txt AC 43 ms 17448 KiB
01_random_00.txt AC 369 ms 17660 KiB
01_random_01.txt AC 770 ms 21768 KiB
01_random_02.txt AC 426 ms 17680 KiB
01_random_03.txt AC 366 ms 17696 KiB
01_random_04.txt AC 485 ms 17624 KiB
01_random_05.txt AC 509 ms 17912 KiB
01_random_06.txt AC 414 ms 17768 KiB
01_random_07.txt AC 361 ms 17544 KiB
01_random_08.txt AC 433 ms 17692 KiB
01_random_09.txt AC 603 ms 18784 KiB
01_random_10.txt AC 564 ms 18212 KiB
01_random_11.txt AC 364 ms 17668 KiB
01_random_12.txt AC 631 ms 19756 KiB
01_random_13.txt AC 548 ms 17936 KiB
01_random_14.txt AC 685 ms 19680 KiB
01_random_15.txt AC 406 ms 17624 KiB
01_random_16.txt AC 369 ms 17660 KiB
01_random_17.txt AC 777 ms 21768 KiB
01_random_18.txt AC 561 ms 18204 KiB
01_random_19.txt AC 551 ms 18284 KiB
02_line_00.txt AC 743 ms 21772 KiB
02_line_01.txt AC 538 ms 18040 KiB
02_line_02.txt AC 707 ms 19652 KiB
02_line_03.txt AC 552 ms 18048 KiB
02_line_04.txt AC 471 ms 17560 KiB
02_line_05.txt AC 452 ms 17640 KiB
02_line_06.txt AC 512 ms 17596 KiB
02_line_07.txt AC 468 ms 17680 KiB
02_line_08.txt AC 549 ms 18232 KiB
02_line_09.txt AC 549 ms 18284 KiB
03_minmax_00.txt AC 42 ms 17292 KiB
03_minmax_01.txt AC 385 ms 17536 KiB
03_minmax_02.txt AC 393 ms 17700 KiB