ورود ثبت‌نام راهنما درباره‌ی کاهو
پرسش‌ها برچسب‌ها کاربر‌ها سوال بپرسید!

آمار پرسش:

  • پرسیده شده: 2015-06-11 10:18:15 -0500
  • مشاهده شده: 535 بار
  • بروز شده: 2015-06-12 14:59:47 -0500

پرسش‌های مشابه:

آزمون دوم سایت Codeshark - سوال ۲ قسمت ج

آقایون با تجربه تو این 1 ماه تا مرحله 3 چه کنیم؟؟؟؟؟؟؟

سوا ل 1 مرحله 3 دوره ی 24 درخت گاوی

سوال در مورد درس خوندن همزمان با المپیاد

سوال 2 مرحله 3 دوره ی 24 روز اول عبور از سد دفاعی ایران!

جزوات برنامه نویسی و الگوریتم برای آزمون مرحله 3 و فراتر از آن

سوال برنامه نویسی : دنباله ای داریم از n عدد

برنامه نویسی پویا چیست و مسائل مهم آن کدامند؟ (قسمت اول)

وب‌سایت مرحله ۳ - کمک برای ترجمه project euler

رفع ابهام در مورد سوال های مرحله 3

نکاتی در مورد نوشتن پاسخ:

در این قسمت می‌تونی به یک پرسش پاسخ بدی. اگه می‌خوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخ‌ها مفید هستند حتما بهشون رای بده تا پرسش‌ها و پاسخ‌های خوب مشخص بشن.

استفاده از ویرایشگر:

توی قسمت پیش‌نمایش می‌تونی ببینی متنی که نوشتی چجوری روی سایت دیده میشه.
خیلی مهم: برای اینکه به خط بعد بری باید دوتا Enter بزنی.
می‌تونی از تگ‌های معمولی و ساده‌ی html هم استفاده کنی.
با دکمه‌هایی که بالای ویرایش‌گر قرار دارند کلی کار می‌شه کرد. از عکس‌گذاشتن بگیر تا لیست شماره‌دار. حتما امتحان‌شون کن.

علائم ریاضی:

برای نوشتن علائم ریاضی می‌تونی از Mathjax استفاده کنی. راهنمای Mathjax رو از سایت math.stackexchange بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.

مسابقه ی آزمایشی سایت irprogramming

3

سلام!

اگه کسی راه حل سوال سه ج رو با اثبات داره ممنون میشم توضیح بده!

پی نوشت: بنا به درخواست دوستان :D یک ج و دو ج رو هم پاسخ بدید!

مرحله-۳ irprogramming
2015-06-11 10:18:15 -0500
پویان 2066 ● 11 ● 18 ● 40
پاک‌کردن   ویرایش سوال
نظرات

اره کلا یکی همه ی ج ها رو بگه،

2015-06-11 12:06:23 -0500 کنکوری

Man tof zadam yejori accept shod

2015-06-11 12:22:39 -0500 آرش خن

من خودمم الگویابی کردم اکسپت شد ولی اثبات نشد!

2015-06-11 12:25:32 -0500 پویان

یه پیشنهاد: به نظرم "با اثبات" رو برداری دوستان راحت تر جواب میدن.

2015-06-11 22:08:53 -0500 آقوی همساده

خوب اثبات مهمه دیگه،جواب بدون اثبات چه بدرد میخوره؟؟

2015-06-11 23:22:36 -0500 کنکوری

3 پاسخ

10

جواب سوال ۳:
لم۱) یه جایگشت $n$ تایی داریم که بزرگترین زیردنباله ی صعودیش $m$ باشه و نزولیش $k$ باشه اگر و تنها اگر داشته باشیم:
$$m + k - 1 \le n \le km$$ خب برا لزومش: طرف چپ عبارت با این اثبات میشه که هر زیر دنباله ی نزولی و هر زیردنباله ی صعودی حداکثر تو یه عضو مشترکن، سمت راستشم با قضیه ی اردوش-ژکرس (البته دقیقن همون قضیه نیستا، ولی اثباتش عین اثبات اون قضیس!)

حالا از لزومه استفاده میکنیم و یه الگوریتم میدیم که جایگشته رو تولید کنه، بعد کفایتشم ثابت میشه!

این الگوریتم پویانه که اگه اون شرط بالا برقرار باشه حتمن جواب میده.

حالا اثبات بهینه بودنش!
لم۲)‌ به ازای هر جایگشت با اون شرایط گفته شده ($n, m, k$)، عضو اول اون جایگشته رو اگه بنامیم $x$، داریم $x \ge max(1, n-k(m-1) )$.
خب اینکه $x \ge 1$ که واضحه! میمونه ثابت کنیم $x \ge n-k(m-1)$. اگه $m=1$ بود خب ینی کل جایگشت باید نزولی باشه و طبق لم۱ دقیق در میاد که $k=n$، پس حله. اگه $m>1$ بود تو جایگشت مدنظرمون همه ی عدد هایی که بزرگتر از $x$ هستن رو درنظر میگیریم، یه جایگشت جدید داریم که $n-x$ تا عضو داره. حالا اگه بزرگترین زیردنباله ی صعودی جایگشت جدیده $m'$ باشه و نزولیش $k'$ باشه، داریم:
$$k' \le k$$ $$m' \le m - 1$$ $$n-x \le k'm'$$ در نتیجه داریم $n-x \le k(m-1)$ پس ینی $x \ge n-k(m-1)$ که همونیه که دنبالش بودیم! $^_^$

الان لم۲ ثابت میکنه اگه الگوریتم زیر به مشکل نخوره(ینی تا آخر پیش بره) حتمن بهترین جوابو میده:
عضو اولو میذاریم $max(1, n-k(m-1) )$. بقیه رو هم بازگشتی میایم حل میکنیم، با $n-1$ عضو، با این مشخصات: اگه $m=1$ بود میگیم نزولیش همون $m$ باشه و صعودیش $k-1$، وگرنه میگیم نزولیش $m-1$ باشه و صعودیش $k$. (اینا دقیقن حالت هایی هستن که اون نامساوی $x \ge max(1, n-k(m-1) )$ مساوی میشد.) حالا جایگشت بدست اومده توسط بازگشتیه رو برمیداریم و اون عدداییش که از عدد اولش بزرگتر-مساوی هستن رو ++ میکنیم و میشه جوابمون!
خب اینم با استقرا میشه اثبات کرد که حتمن شرایط لم۱ رو داره و اونا کافی هستن که جایگشت وجود داشته باشه؛ اینجوریم میشه گفت که جواب کد پویان رو اگه نگاه کنین میبینین باز شده ی همین روش بازگشتیه که توضیح دادم! پس این الگوریتمه حتمن تا آخر میره و عملن همون الگوریتم پویانه، پس الگوریتم پویان بهینست!

2015-06-12 04:17:24 -0500
محمد مهدی 1955 ● 5 ● 12 ● 40
پاک‌کردن   ویرایش پاسخ
نظرات

ایول الگوریتم من بهینس :D دستت درد نکنه!!

2015-06-12 04:34:03 -0500 پویان

++

2015-06-12 05:20:48 -0500 کنکوری
7

خودم جواب دو ج رو میگم :)

اول همه ی اعداد لاکی رو به ترتیب میریزیم تو یه صف!

حالا بی اف اس میزنیم!!

به ازای هر عدد که بهش رسیدیم اینکارارو میکنیم:(مثلا x)

به ازای هر عدد لاکی(مثل lu) اگه x + lu بزرگتر از n نبود و تاحالا تو صف نرفته بود:

      اونو  به صف اضافه میکنیم و f اون عدد رو میکنیم fx ضربدر lu!

اثباتش هم گریدیه دیگه!

2015-06-11 12:25:08 -0500
پویان 2066 ● 11 ● 18 ● 40
پاک‌کردن   ویرایش پاسخ
نظرات

@پویان داداش کدتو لطفا میذاری؟ منظورت fx ضربدر flu نبوده؟

2015-06-11 12:33:55 -0500 آقوی همساده

flu = luه دیگه

2015-06-11 13:04:21 -0500 پویان

http://paste.ubuntu.com/11697654/

2015-06-11 13:08:36 -0500 پویان

پنجاه خط وسط واسه کثیف کاری های الف و ب هستش!

2015-06-11 13:09:26 -0500 پویان

++

2015-06-11 13:33:49 -0500 کنکوری
5

جواب 1 ج عدد رو به مبنای فیبوناچی ببرید (معلومه منظورم چیه دیگه) بعد هر سری هر 100 رو به 011 تبدیل کنید به صورت بازگشتی (میشه دی پی هم زد ولی ولش) اینم کد

توضیحه برنامه : اولش اون عدده رو میکنه مبنای فیبوناچی بعدش تابع رو صدا میزنه

توضیحه تابعه: تعداد حالت های تبدیل رشته s به رشته های دیگه از جایگاه k ام به بعد

اگه کسی توضیح اضافه خواست بگه بهش بگم :)

پانویس : مبنای فیبوناچی یعنی اینکه یه عدد رو به صورت جمع اعداد فیبوناچی بنویسیم به این صورت که هر سری بزرگترین فیبوناچی ممکن رو از این عدد کم کنی مثلا 30=18+8+3+1 خوب یعنی الان 18 یکه 13 صفره 8 یکه 5 صفره 3 یکه 2 صفره 1 یکه

2015-06-11 14:11:06 -0500
حمیدرضاه 2979 ● 20 ● 26 ● 52
پاک‌کردن   ویرایش پاسخ
نظرات

اینم یه ذره کدش آسونتره به نظرم یه راه بدیهی و البته بهینه شده : http://pastebin.ubuntu.com/11698502/

2015-06-11 15:50:47 -0500 طوفان

:D

2015-06-11 21:46:06 -0500 تهی نام

من سوتی دادم 8 هم یکه :)

2015-06-12 14:59:31 -0500 حمیدرضاه

:)

2015-06-12 20:36:32 -0500 آقوی همساده

پاسخ شما

فقط در صورتی که پاسخی برای این پرسش دارید، آن را اینجا بنویسید و برای بحث کردن از قسمت «ثبت‌ نظر» استفاده کنید. شما می‌توانید قبل از وارد شدن به سایت پاسخ خود را بنویسید. این پاسخ ذخیره می‌شود و زمانی که شما وارد سایت شدید یا ثبت‌نام کردید منتشر می‌شود.

پیش‌نمایش:

کلیه‌ی حقوق این سایت متعلق به کمیته‌ی ملی المپیاد کامپیوتر است.