ในการแข่งขันที่นักแข่งต้องเลี้ยวไปตามทางโค้งอย่างน้อยหนึ่งรอบตำแหน่งเริ่มต้นสำหรับนักแข่งแต่ละคนจะถูกย้ายดังนั้นนักแข่งแต่ละคนเดินทางในระยะทางเดียวกันรอบ ๆ สนามแข่ง (ไม่เช่นนั้นนักแข่งในเลนในสุด) )
กำหนดความยาวของแกนหลักและแกนรอง (หรือกึ่งหลักและกึ่งรองหากคุณต้องการ) ของแทร็กวงรีและจำนวนเลนในแทร็กส่งออกระยะทางจากจุดเริ่มต้นของเลนในสุดที่แต่ละเลน ควรจะถูกเซ
ข้อมูลจำเพาะ
- แต่ละเลนเป็นวงรีที่มีแกนกึ่งหลัก 5 หน่วยที่ยาวกว่าเลนที่สั้นที่สุดถัดไป เพื่อความง่ายสมมติว่าเลนมีความกว้าง 0
- เลนในสุดอยู่เสมอเริ่มต้นที่ 0 และจุดเริ่มต้นอื่น ๆ ทุกค่าเป็นจำนวนเต็มบวกมากกว่าหรือเท่ากับจุดเริ่มต้นก่อนหน้า
- อินพุตและเอาต์พุตอาจอยู่ในรูปแบบที่สะดวกและเหมาะสม
- อินพุตจะเป็นจำนวนเต็มเสมอ
- คุณต้องคำนวณเส้นรอบวงของแทร็กถึงภายใน 0.01 หน่วยของค่าจริง
- เอาต์พุตจะถูกปัดเศษลงเป็นจำนวนเต็มที่ใกล้เคียงที่สุด (ปูพื้น)
- เส้นชัยเป็นจุดเริ่มต้นสำหรับนักแข่งชั้นในสุด มีเพียงรอบเดียวในการแข่งขัน
- ความยาวของแกนวัดโดยใช้เลนในสุดของแทร็ก
- การส่งออก 0 สำหรับการชดเชยของเลนในสุดนั้นเป็นตัวเลือก
กรณีทดสอบ
รูปแบบ: a, b, n -> <list of offsets, excluding innermost lane>
20, 10, 5 -> 30, 61, 92, 124
5, 5, 2 -> 31
15, 40, 7 -> 29, 60, 91, 121, 152, 183
35, 40, 4 -> 31, 62, 94
กรณีทดสอบเหล่านี้สร้างขึ้นด้วยสคริปต์ Python 3 ต่อไปนี้ซึ่งใช้การประมาณของเส้นรอบวงของวงรีที่วางแผนโดย Ramanujan:
#!/usr/bin/env python3
import math
a = 35 # semi-major axis
b = 40 # semi-minor axis
n = 4 # number of lanes
w = 5 # spacing between lanes (constant)
h = lambda a,b:(a-b)**2/(a+b)**2
lane_lengths = [math.pi*(a+b+w*i*2)*(1+3*h(a+w*i,b+w*i)/(10+math.sqrt(4-3*h(a+w*i,b+w*i)))) for i in range(n)]
print("{}, {}, {} -> {}".format(a, b, n, ', '.join([str(int(x-lane_lengths[0])) for x in lane_lengths[1:]])))
การประมาณที่ใช้คือ:
ในที่สุดนี่คือแผนภาพที่เป็นประโยชน์สำหรับการทำความเข้าใจการคำนวณออฟเซ็ต:
h**5
ที่ดีภายใต้0.01
ค่าที่หลากหลาย