المپدیا

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

ابزار کاربر

ابزار سایت


سوالات المپیاد:مرحله ی اول:دوره ی ۳۱:سوالات ۱۳ تا ۱۵

سوالات ۱۳ تا ۱۵

ﻓﺮﺽ ﮐﻨﯿﺪ ﺩﻧﺒﺎﻟﻪﺍﯼ ﺍﺯ ﺍﻋﺪﺍﺩ ﺩﺍﺭﯾﻢ.ﺩﺭ ﻫﺮ ﻣﺮﺣﻠﻪ میﺗﻮﺍﻥ یکی ﺍﺯ ﺳﻪ ﻋﻤﻠﯿﺎﺕ ﺯﯾﺮ ﺭﺍ ﺭﻭﯼ ﺩﻧﺒﺎﻟﻪ ﺍﻧﺠﺎﻡ ﺩﺍﺩ:

  • ﺩﺳﺘﻮﺭ copy: ﺑﺎ ﺩﺳﺘﻮﺭ copy(i) یک ﻋﺪﺩ ﺑﺎ ﻣﻘﺪﺍﺭ i ﺍﻣﯿﻦ ﻋﻀﻮ ﺩﻧﺒﺎﻟﻪ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﺩﻧﺒﺎﻟﻪ ﺍﺿﺎﻓﻪ می‌‌ﺷﻮﺩ.ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﺍﮔﺮ ﺩﻧﺒﺎﻟﻪﯼ ⟨۳,۷,۲,۱⟩ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﯿﻢ، ﺑﺎ ﺩﺳﺘﻮﺭ (۲)copy ﺑﻪ ﺩﻧﺒﺎﻟﻪﯼ ⟨۳,۷,۲,۱,۷⟩ می‌رﺳﯿﻢ.
  • ﺩﺳﺘﻮﺭ delete: ﺑﺎ ﺩﺳﺘﻮﺭ delete(i) ﻋﺪﺩ i ﺍﻡ ﺩﻧﺒﺎﻟﻪ ﺣﺬﻑ میﺷﻮﺩ.ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﺍﮔﺮ ﺩﻧﺒﺎﻟﻪﯼ ⟨۴,۱,۹,۲,۵⟩ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﯿﻢ، ﺑﺎ ﺩﺳﺘﻮﺭ (۲)delete ﺑﻪ ﺩﻧﺒﺎﻟﻪﯼ ⟨۴,۹,۲,۵⟩ می‌رﺳﯿﻢ.
  • ﺩﺳﺘﻮﺭ merge: ﺑﺎ ﺩﺳﺘﻮﺭ $merge(i, j)$ ﻋﺪﺩ jﺍﻡ ﺩﻧﺒﺎﻟﻪ ﺣﺬﻑ ﺷﺪﻩ ﻭ ﻣﻘﺪﺍﺭ ﺁﻥ ﺑﻪ ﻋﺪﺩ i ﺍﻡ ﺩﻧﺒﺎﻟﻪ ﺍﺿﺎﻓﻪ میﺷﻮﺩ. ﺩﺭ ﺍﯾﻦ ﺩﺳﺘﻮﺭ ﺑﺎﯾﺪ $i < j$ ﺑﺎﺷﺪ.ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﺍﮔﺮ ﺩﻧﺒﺎﻟﻪﯼ ⟨۴,۱,۹,۲,۵⟩ ﺭﺍ ﺩﺍﺷﺘﻪ ﺑﺎﺷﯿﻢ، ﺑﺎ ﺩﺳﺘﻮﺭ $merge(2, 4)$ به دنباله ⟨۴,۳,۹,۵⟩ می‌رسیم.

ﺍﺟﺮﺍﯼ ﻫﺮ یک ﺍﺯ ﺩﺳﺘﻮﺭﻫﺎﯼ ﺑﺎﻻ یک ﻭﺍﺣﺪ ﻫﺰﯾﻨﻪ ﺩﺍﺭﺩ. ﻣﺘﻐﯿﺮ size ﺩﺭ ﻫﺮ ﻟﺤﻈﻪ ﺗﻌﺪﺍﺩ ﻋﻀﻮﻫﺎﯼ ﺩﻧﺒﺎﻟﻪ ﺭﺍ ﻧﺸﺎﻥ می دهد. ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﻭقتی ﺩﻧﺒﺎﻟﻪﯼ ⟨۳,۶,۱۰,۱⟩ ﺭﺍ ﺩﺍﺭﯾﻢ، size=۴ ﺍﺳﺖ.

سوال ۱۳

ﻓﺮﺽ ﮐﻨﯿﺪ ﺩﺭ ﺍﺑﺘﺪﺍ ﺩﻧﺒﺎﻟﻪﯼ $⟨۱,۲,...,۱۰۰⟩$ ﺭﺍ ﺩﺍﺭﯾﻢ.ﭘﺲ ﺍﺯ ﺍﺟﺮﺍﯼ ﺍلگوریتم ﺯﯾﺮ، ﻣﺠﻤﻮﻉ ﺍﻋﻀﺎﯼ ﺩﻧﺒﺎﻟﻪ ﭼﻪ ﺧﻮﺍﻫﺪ ﺑﻮﺩ؟

  • $1$. اگر size < ۳ است، به گام ۵ برو.
  • $2$. delete(size-۱)
  • $3$. merge(size-۱, size)
  • $4$. به گام ۱ برو.
  • $5$. پایان.
  1. ۲۵۰۱
  2. ۵۰۵۱
  3. ۲۵۵۰
  4. ۲۵۵۱
  5. ۴۹۵۱

راهنمایی

چند گام ابتدایی الگوریتم را اجرا کنید و سعی کنید الگویی بیابید.

راهنمایی

همانطور که مشهود است،‌ اعداد فرد پاک شده و اعداد زوج با آخرین جایگاه آرایه جمع زده می‌شوند.

راهنمایی

در آخرین عمل نیز عدد ۳ حذف شده و باقی اعداد زوج در جایگاه نهایی جمع زده شده‌اند.

راهنمایی

دقت کنید آنچه مورد پرسش مسئله است، مجموع اعدادیست که در حال حاضر در آرایه هستند. پس با مجموع اعداد زوج، عدد ۱ که همچنان در ابتدای آرایه قرار دارد را نیز بایستی جمع بزنید.

سوال ۱۴

ﻓﺮﺽ ﮐﻨﯿﺪ ﺩﺭ ﺍﺑﺘﺪﺍ ﺩﻧﺒﺎﻟﻪﯼ $⟨۰,۱⟩$ ﺭﺍ ﺩﺍﺭﯾﻢ.ﭘﺲ ﺍﺯ ﺍﺟﺮﺍﯼ ﺍلگوریتم ﺯﯾﺮ، عنصر اخر دنباله چه خواهد بود؟
به ازای i از ۱ تا ۱۰ انجام بده:

  • $1$. copy(size-۱)
  • $2$. copy(size-۱)
  • $3$. merge(size-۱, size)
  1. ۱۰۲۴
  2. ۱۴۴
  3. ۵۱۲
  4. ۲۵۶
  5. ۸۹

راهنمایی

دقت کنید در هر بار اجرای سه دستور متوالی داده شده، یک عدد به انتهای آرایه اضافه می‌شود. این عدد نسبت به اعداد قبلی آرایه چگونه تعیین می‌شود؟

راهنمایی

هر عدد، برابر جمع دو عدد پیشین خود خواهد بود.

راهنمایی

چون در ابتدا دو عدد در دنباله داریم و ده بار گام داده شده را اجرا می‌کنیم،‌ پاسخ برابر ۱۲ امین عضو دنباله است.

سوال ۱۵

ﻓﺮﺽ ﮐﻨﯿﺪ ﺩﺭ ﺍﺑﺘﺪﺍ ﺩﻧﺒﺎﻟﻪﯼ $⟨۱⟩$ ﺭﺍ ﺩﺍﺭﯾﻢ و می‌خواهیم با یک برنامه به دنباله $⟨۱,۲,...,۱۰۰⟩$ برسیم. کمینه هزینه (تعداد اجرا‌های دستور‌های) مورد نیاز چیست؟

  1. ۲۴۰
  2. ۳۰۰
  3. ۹۹
  4. ۱۹۸
  5. ۲۹۷

راهنمایی

ساخت یک عدد متمایز با اعداد کنونی دنباله به حداقل یک عمل merge نیاز دارد و هر عمل merge تعداد اعداد دنباله را یک واحد کم می کند.


ابزار صفحه