Processing math: 83%

المپدیا

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

ابزار کاربر

ابزار سایت


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

مِـمُـل

‎مِـمُـل یک شخصیت کوچولو و محبوب کارتونی است (‎ شاید شما یادتون نیاد!). یک‌روز صبح، ‎مِـمُـل می‌خواست به خانه‌ی دخترمهربان(‎ شخصیت محبوبِ ‎مِـمُـل)‎ برود؛ اما در میانه‌ی راه متوجه شد که بارانِ شبِ گذشته، رودخانه‌ای به عرض ‎d‎ واحد را در مسیر همیشگی‌اش به‌وجود آورده است. برای راحتی کار، رودخانه را یک بازه‌ی باز روی محور ‎x‎ها ‎(افقی)‎ بگیرید که از نقطه صفر (جایی که مِـمُـل‎‎ هست) تا نقطه‌ی ‎d‎ روی محور را پوشانده است.

خوش‌بختانه در این رودخانه ‎n‎ عدد سنگِ ریز و محکم در فاصله‌های ‎s1‎ تا ‎sn‎ از لبه‌ی رودخانه (نقطه‌های ‎s1‎ تا ‎sn‎ محور ‎xها)‎ قرار دارند. هم‌چنین ‎m‎ قورباغه‌ی چاق نیز در نقاط ‎f1‎ تا ‎fm‎ قرار گرفته‌اند.

پس از کمی جست‌وجو، برای عبور از این رودخانه، مِـمُـل‎ یک تکه چوب دراز به‌طول ‎k‎ پیدا کرد. می‌دانیم با استفاده از این چوب و سنگ‌هایی که درون رودخانه وجود دارند، اگر مِـمُـل‎ در نقطه‌ی ‎x‎ باشد و یک سنگ در فاصله‌ی ‎t‎ از آن نقطه قرار داشته باشد و ‎tk‎، آن‌وقت مِـمُـل‎ می‌تواند چوب‌اش را دراز کرده و روی سنگ بگذارد و با حرکتی شبیه قهرمان‌های پرش با نیزه (‎ولی به‌جای از صفر تا ‎۹۰‎ درجه، از صفر تا ‎۱۸۰‎ درجه‎!‎) به نقطه‌ای با فاصله‌ی ‎2t‎ از ‎x‎، در راستای سنگ برود. یعنی اگر سنگ جلوی (سمت راست) ‎x‎ بود (نقطه‌ی ‎x+t‎) در آن‌صورت مِـمُـل می‌تواند به نقطه‌ی ‎x+2t‎ برود و اگر سنگ سمت چپ ‎x‎ بود (نقطه‌ی ‎xt‎) در آن‌صورت ‎مِـمُـل به‌خانه‌ی ‎x2t‎ می‌رود.

توجه کنید که چون سنگ‌ها به‌شدت لغزنده هستند، مِـمُـل فقط می‌تواند روی قورباغه‌ها و زمین بایستد‎!‎ هم‌چنین چون چوب خیلی سنگین است، مِـمُـل‎ نمی‌تواند روی زمین (از نقطه‌ی صفر به سمت چپ) راه برود، اما می‌تواند با چند پرش رفت و برگشت در نقطه‌ای عقب‌تر از نقطه‌ی اوّلیه‌اش (مثلاً ‎2‎) قرار بگیرد. و نیز می‌دانیم فقط سنگ‌ها (و نه زمین) می‌توانند به عنوان تکیه‌گاه ‎(مرکز)‎ پرش قرار بگیرند‎) ‎چون نوک چوب تیز است، در زمین نرم و نیز بدن قورباغه‌ها ‎(اوووچ!)‎ فرو می‌رود!).

هدف نهایی مِـمُـل نیز قرار گرفتن در نقاط ‎d‎ یا جلوتر از آن (بیش‌تر از ‎d‎) است که در آن‌صورت چوب را رها کرده و به‌سمت خانه‌ی دختر مهربان می‌دود. اما از آن‌جا که هر پرش (با چوب، به‌مثابه نیزه‎!‎) برای ‎مِـمُـل‎، یک دقیقه طول می‌کشد، مِـمُـل‎ می‌خواهد در کم‌ترین زمان ممکن از رودخانه عبور کند. به ‎مِـمُـل کمک کنید و برنامه‌ای بنویسید که با خواندن ‎d‎، تعداد و محل سنگ‌ها و قورباغه‌ها و نهایتاً طول چوبش ‎(k)‎ مشخّص کند که ‎مِـمُـل حداقل پس از چند دقیقه به آن‌طرف رودخانه می‌رسد.

‎ورودی

  • در سطر اوّل ورودی، به‌ترتیب از چپ به راست چهار عدد ‎d (عرض رودخانه)، سپس ‎n (تعداد سنگ‌ها)، بعد ‎m (تعداد قورباغه‌ها) و نهایتاً ‎k (طول چوب ‎مِـمُـل)‎ آمده است.
  • در سطر دوم ورودی ‎n‎ عدد (نه لزوماً مرتّب) آمده است که هر کدام محل یکی از سنگ‌ها را نشان می‌دهد.
  • در سطر سوم ورودی ‎m‎ عدد (نه لزوماً مرتّب) آمده است که هر کدام محل یکی از قورباغه‌ها را نشان می‌دهد.
  • تمام اعداد ورودی صحیح و مثبت‌اند.
  • تمام سنگ‌ها و قورباغه‌ها در نقاط صحیح داخل رودخانه (بازه‌ی ‎[1‎, ‎d-1]‎) قرار دارند.
  • هیچ دو سنگ، دو قورباغه یا یک سنگ و یک قورباغه‌ای در یک مکان قرار ندارند.
  • 1\le n \le 2~000‎.
  • 1\le m \le 5\times10^4‎.
  • 1\le k \le 5\times10^4‎.
  • همواره ‎1 \le d \le 2\times10^9‎ و در ‎۵۰‎ درصد تست‌ها، ‎1\le d\le 2\times10^6‎.

‎‎خروجی

در صورتی که ‎مِـمُـل می‌تواند بالاخره از رودخانه عبور کند، در یک سطر کم‌ترین تعداد پرش لازم را بنویسید. در غیر این‌صورت اگر هرگز ‎مِـمُـل نمی‌تواند به نقطه‌ی ‎d‎ یا نقاط جلوتر از آن برسد، در تنها سطر خروجی عبارت No Solution (دقیقاً با ‎N‎ و ‎S‎‎ بزرگ) را بنویسید.

محدودیت‌ها

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

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

ورودي نمونه خروجي نمونه
4 2 1 1
‎1 3
2‎
‎2
4 1 1 2
‎1
2‎
‎No Solution

ابزار صفحه