Challenger

المپیاد کامپیوتر , الگوریتم , برنامه نویسی , ترکیبیات , گراف , ....

Challenger

المپیاد کامپیوتر , الگوریتم , برنامه نویسی , ترکیبیات , گراف , ....

Challenger
طبقه بندی موضوعی
پیوندهای روزانه

جهان در زندان!

پنجشنبه, ۳ اسفند ۱۳۹۱، ۱۰:۴۳ ب.ظ

شاید عجیب باشه که من سوال الگوریتم بدم ولی ببخشید دیگه به بزرگی خودتون. این سوال چندان سخت نیس ایده ی ساده ای داره واسه آزمون المپیاد لهستانه ولی سر ازمونش افراد کمی زدنش. من سوالو می گم راه حلشم احتمالن چن روز بعد می زارم.

 سوال می گه که یه ساختمون n طبقه داریم. جهان تو یه طبقه اش زندانی شده. در هر مرحله می تونیم یکی از سوالات زیر رو بپرسیم و زندانبان که دم در ساختمون وایستاده جواب رو بهمون بگه. همیشه هم راست می گه ولی خب آدم پولکی ایه. بابت هر سوالی که جوابش بله باشه a دلار و بابت هر سوالی که جوابش نه باشه b دلار می گیره. جهان برامون خیلی ارزشمنده باید پیداش کنیم پس حاضریم این مبلغ رو بپردازیم ولی خب ما می خواییم با کمترین هزینه بفهمیم جهان تو طبقه چندمه ( :-فکر اقتصادی) :D

سوال نوع یک. آیا جهان در طبقه i ام و بالاتر است؟ (i عدد دلخواه بین 1 تا n)

سوال نوع دوم. آیا جهان در طبقه i ام و پایین تر است؟ (i عدد دلخواه بین 1 تا n)

n <= 1000000000

a <= 10000

b <= 10000


راه حل: (افزوده شده در 15 اسفند)

یک داینامیک ساده می زنیم! ابتدا یه سقف برای جواب در نظر می گیریم. فرض کنیم همون باینری سرچ عادی رو بزنیم. با خرج کردن حداکثر max(a,b) * lgn دلار به جهان می رسیم(در بدترین حالت) :D که این مقدار حداکثر برابر 300000 هست!

dp[i]

را برابر بیشترین تعداد طبقاتی قرار می دهیم که با i دلار هزینه بتونیم جهان رو توش پیدا کنیم! جواب برابر است با اولین i ای که:

dp[i] >= n

و این داینامیک این گونه آپدیت می شه:

dp[i] = 2 *   min(dp[i - a], dp[i - b])

:)


پ.ن: سوال یه راه حل واضح با اردر n^2 داره که خب مسلمن قابل قبول نیست :D

پ.ن2: من واقعن نمی تونم رسمی پست بنویسم :-" بازم به بزرگی تون ببخشید :D

پ.ن3: روز نیکوکاری (14 اسفند) و درختکاری رو بهتون تبریک می گم :D

موافقین ۶ مخالفین ۰ ۹۱/۱۲/۰۳
بنیامین دلشاد

نظرات  (۱۳)

۰۳ اسفند ۹۱ ، ۲۲:۵۷ ابوالفضل اسدی
رسمی پست بزن پسر جان
رسمی پست نزن پسر جان!
نزار این جا هم به سرنوشت شوم وبلاگای رسمی دچار بشه :دی
همین طوری خوبه... :)
عالییی :)))
سوال دقیقا چی میخواد ؟!!!(نمیدونم چرا متوجه نمیشم :دی)

بیایم min(a,b) رو پیدا کنیم بعد هربار بجای اینکه باینری سرچ نصف کنیم ... به a/b نسبت تقسیمش کنیم حالا برای این بدترین حالت رو بدیم بیرون

set.clear() از چه اوردری هست؟(1)o یا(ان)o
آخ آخ میخواستم پیام خصوصی کنم که اشتباه بود مردم نخندن بهم !!!
جدیدا حافظه اصلا یاری نمیکنه !!!
۰۴ اسفند ۹۱ ، ۱۳:۵۱ ابوالفضل اسدی

حیف که الان بخوام مقاومت کنم از طرف مسئول هر گونه کار اینترنتی مربوط به المپیاد کامپیوتری (ژنیک) تحریم میشم و جیپک یهو حذف میشه

...

:)

:)))
خواهش میکنم استاد!
ما جرئت نداریم تو کار آقایان جی پکی دخالت کنیم! D:
۰۵ اسفند ۹۱ ، ۲۲:۳۶ ابوالفضل اسدی

همه می دونن هر کسی وارد المپ کامپ میشه باید مجوز از ژنیک داشته باشه

:)

جیپک بی استاد ژنیک، ... ای بیش نیست

(می خواستم جای ... بنویسم شاز جرئت نکردم)

:)

@ابوالفضل : چه قدرم که روت نشد :-"""""""

@ابوالفضل و ژنیک: استادا با هم دعوا نکنین جلو ما شاگردا زشته! :دی ;)

کامنتای این پست عالیه این همه سوال نوشتم یه نفر در موردش نظر داد بعد یه پ.ن2 نوشتم کلن بحثا بابت اون شروع شد :)))
راضیم اصن :D 
:-""""
داشتم تصور می کردم این عکس که اون بالا هست شده شبیه کامنتای این پست :دی 
salam
@dhm
hala kodom yeki(zane ya marde to akse) to in comment-ha kie?!!
:))))
ساعت 00:14 راه حل رو گذاشتم می شه 15 اسفند دیگه :-"

قبل هرچیز لایک به پ.ن3 !!! واقعا پسندیده بود !!

میگم من نمیفهمم دیگه داینامیک برای چی زدیم ؟
سوال اینو میخواد ؟ : بیشترین هزینه ای که ممکنه بکنیم تا جهان رو پیدا کنیم به ازای n,a,b, داده شده
درست فهمیدم یا اینکه پرتم از قضیه ؟!!
خب مگه نباید بدترین حالت پیدارو پیدا کنیم؟
باینری سرچ استفاده میکنیم ولی اینجوری که مثلا فرض کنید a>b
پس اگر یک بازه به طول k داریم حالابه دوقسمت تقسیم میکنیم که نسبتشون la/b باشه
باینری سرچ معمولی هم که مشخصه اشتباهه (a=1,b=100000)
پس حالاباید بدترین حالت این نوع عجیبری سرچ (بر وزن باینری سرچ!!) رو پیدا کنیم(بلدنیستم :دی)

ولی داینامیک بالا درست اپدیت میشه؟ نبایدmaxباشه؟
مقدارهای اولیه اش چحوری هست؟(dp[a]=1 && dp[b]=1 اینجوری؟)
یخورده که فکر میکنم بنظرم میاد که اگر درست اپدیت میشه دقیقا داره بدترین حالت رو حساب میکنه

اصلا هم فکر نکنید بیدار بودم تا الام :-"

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی