Processing math: 39%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی انتخاب تیم:دوره ی ۱۹:سوال ۸

ParkIt

n‎ ماشین در حاشیه‌ی یک سمت خیابان گلبرگ، پشت سر هم پارک شده‌اند. یک روز عصر، گلی - که یکی از ساکنان خیابان گلبرگ است - وارد این خیابان شده و متوجه می‌شود که جای پارک برای ماشینش وجود ندارد‎!‎ به‌عبارت دقیق‌تر، اگر فرض کنیم ماشین شماره ‎i‎ (که ‎1in‎) از نقطه‌ی ‎ai (از ابتدای خیابان) تا نقطه‌ی ‎bi‎ را اشغال کرده‌است، طول خیابان ‎D‎ و طول ماشین گلی ‎L‎ است، در این صورت فاصله‌ی هر دو ماشینی که در خیابان پشت سر هم پارک شده‌اند )‎ و فاصله‌ی قبل از اولین ماشین در خیابان همگی کمتر از ‎L‎ هستند.

با کمی دقت، گلی در می‌یابد که بین بعضی از ماشین‌ها فاصله خالی وجود دارد. به‌عنوان مثال اگر ‎[a1,b1]=[18,22]‎، ‎[a2,b2]=[29,37]‎، ‎[a3,b3]=[1,16]‎، ‎[a4,b4]=[22,26]‎ و طول خیابان ‎D=37‎ باشد، در این‌صورت بین ماشین شماره سه و یک، به‌اندازه‌ی ‎۲‎ واحد فاصله‌ی خالی (از ‎۱۶‎ تا ۱۸)‎ و بین ماشین شماره چهار و دو، ‎۳‎ فاصله‌ی خالی وجود دارد، اما ماشین شماره یک و چهار به‌هم چسبیده‌اند.

در این حال و هوا، ایده‌ای که به ذهن گلی می‌رسد این‌ست که اگر تعدادی از ماشین‌ها به‌سمت جلو یا عقب بروند در این‌صورت یک جای خالی مناسب (به‌طول حداقل ‎L)‎ برای او پیدا می‌شود. مثلاً در مثال گفته شده در بالا، اگر ‎L=5‎ باشد، کافی‌ست ماشین‌های شماره یک و چهار هر دو، ‎۳‎ واحد به سمت جلو حرکت کنند تا بین ماشین شماره سه و ماشین شماره یک فاصله برابر ‎۵‎ ایجاد شده و گلی بتواند ماشینش را پارک کند. واضح‌ست که در برخی مواقع شاید لازم باشد تعداد بیش‌تری از ماشین‌ها جابه‌جا شده و از آن میان، عده‌ای به عقب و عده‌ای به جلو بروند. ترتیب عقب و جلو رفتن، دلخواه است؛ منتهی ترتیب داخلی ماشین‌ها باید ثابت بماند.

با تجربه‌ی قبلی‌ای که گلی از اهالی خیابان گلبرگ دارد، می‌داند که برای این‌که ماشین ‎i،‎اُم به‌اندازه‌ی ‎Δi‎ واحد حرکت کند، باید به صاحب آن به اندازه‌ی ‎S_i‎ + ‎\Delta_i \times M_i‎ تومان پول بدهد‎!‎ به‌عنوان مثال ‎S_5 = 100‎ و ‎M_5 = 10‎ بدین معنی است که مالک ماشین پنجم، برای این‌که ماشینش تکان بخورد ابتدا ‎۱۰۰‎ تومان گرفته و بعد به‌ازای هر یک واحدی که ماشینش عقب یا جلو برود ‎۱۰‎ تومان دیگر هم می‌گیرد‎!‎

در این اوضاع آشفته، گلی از شما که یک برنامه‌نویس هستید کمک می‌خواهد…

برنامه‌ای بنویسید که

  • از ورودی‎ تعداد ماشین‌ها ‎(n)‎، طول خیابان ‎(D)‎ و طول ماشین گلی ‎(L)‎ را بخواند.
  • برای هر ماشین ‎i (که ‎1 \le i \le n)‎، مکان‌های ‎a_i‎ و ‎b_i‎ و مقادیر ‎S_i‎ و ‎M_i‎ را بخواند.
  • کم‌ترین هزینه‌ای که لازم است گلی به اهالی خیابان گلبرگ بپردازد تا بتواند ماشینش را پارک کند، بیابد.
  • این هزینه را در ‎خروجی‎ بنویسد.

ورودی

  • در سطر اول ورودی، ابتدا عدد ‎D‎ و سپس عدد ‎L‎ قرار دارد‎.‎
  • در سطر دوم ورودی، عدد ‎n‎ قرار دارد‎.
  • در سطر سوم تا ‎(n+2)\،‎اُم ورودی در هر خط چهار عدد نوشته می‌شود که این اعداد، ‎a_i~b_i~S_i~M_i‎ هستند.
  • برای تمامی ماشین‌های پارک شده ‎0 \le a_i < b_i \le D \le 10^7‎. هیچ دو ماشینی با هم تداخل ندارند.
  • M_i‎ ها و ‎S_i‎ ها صحیح، نامنفی و کمتر از ‎1000‎ هستند.
  • L‎ همواره مثبت و کمتر از ‎10^6‎ است.
  • 0 \le n \le 5000‎.
  • در حداقل ‎۴۰‎ درصد تست‌ها تمامی اعداد ورودی الزاماً کمتر از ‎1000‎ می‌باشند.

خروجی

  • در تنها سطر خروجی، کمترین هزینه‌ای که گلی باید پرداخت کند را بنویسید.
  • در صورتی که گلی هرگز نمی‌تواند ماشینش را در این خیابان پارک کند، در خروجی ‎-1‎ را بنویسید.
  • در صورتی که گلی در ابتدا می‌تواند ماشینش را بدون جابه‌جایی ماشین‌های پارک شده، پارک کند، هزینه صفر باید در خروجی نوشته شود.

محدودیت‌ها

  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

ورودی و خروجی نمونه

ورودی نمونه خروجی نمونه
37 5‎
4‎
18 22 10 1‎
29 37 1 10‎
1 16 0 1‎
22 26 10 1
24

ابزار صفحه