روندنما


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

در جای‌جای جهان افرادی پیدا می‌شوند که مسابقه‌ی برنامه‌نویسی برگزار می‌کنندِ. از بین این افراد، تعدادی هم هستند که خیلی مسابقه‌ی برنامه‌نویسی برگزار می‌کنند! چنین افرادی بسیار نایاب هستند، اما اگر بتوانید با بیش از یکی از ایشان صحبت کنید، می‌بینید که ویژگی‌های مشترک بسیاری دارند!

این مسابقه نیز توسط تعدادی از این افراد طراحی شده. از ویژگی‌هایی که این افراد دارند، این است که معمولاً برای سوال سخت مسابقه، سوال‌های مبحث "شار بیشینه" (یا "فلو") را می‌پسندند و بسیار از این تیپ سوال‌ها استفاده می‌کنند! اما این مسابقه یک مسابقه‌ی معمولی نیست؛ از این جهت برگزارکنندگان دوست داشتند این مسابقه تا جای ممکن متفاوت باشد؛ به همین دلیل سوال آخر مسابقه دیگر مربوط به فلو نیست؛ بلکه مربوط به فلوچارت است! (آری! سطح خلاقیت برگزارکنندگان حقیقتاً ستودنیست.)

روندنما(یا flowchart) یکی از ابتدایی‌ترین ابزارهاییست که برای نمایش الگوریتم‌ها و برنامه‌ها بکار می‌رود. روندنما مانند یک زبان برنامه‌نویسی است که بصورت تصویری و ساده، برنامه را توصیف می‌کند. یک نمونه از روندنما را می‌توانید در شکل زیر ببینید:

توضیح تصویر

این روندنما در انتها، مقدار ۵ را چاپ می‌کند.

در این سوال نمونه‌های ساده‌ای از روندنما مورد بررسی است. فرض کنید در روندنما، چنین ابزارهایی داشته باشیم:

  • دایره‌های شروع و پایان: در داخل دایره‌ی شروع START و در داخل دایره‌ی پایان، END نوشته شده است. هر روندنما شامل دقیقاً یک دایره‌ی شروع و یک دایره‌ی پایان است. دایره‌ی شروع یک مسیر خروجی دارد و دایره‌ی پایان یک مسیر ورودی.
  • دستورها: دستورها در داخل مستطیل نوشته می‌شوند. هر مستطیل دستور دقیقاً یک مسیر ورودی دارد و یک مسیر خروجی.
  • شرط‌ها: در داخل لوزی، شرط مربوطه می‌آید. لوزی شرط، یک مسیر ورودی دارد و دو مسیر خروجی که همه‌ی مسیرها از گوشه‌های لوزی به آن وصل می‌شوند و همیشه دو مسیر خروجی از گوشه‌های پایین و راست آن خارج می‌شوند. در صورت برقرار بودن شرط، برنامه از سمت پایین لوزی ادامه می‌یابد و در صورت برقرار نبودن شرط، از سمت راست لوزی ادامه می‌یابد.
  • تبدیل چند به یک: در دایره‌های کوچک، چند مسیر عبوری وارد می‌شوند و تنها یک مسیر خروجی خارج می‌شود. این مسیر خروجی ادغام این چند ورودی است؛ یعنی مسیر برنامه از هریک از ورودی‌ها وارد شد از این خروجی ادامه می‌یابد.
  • مسیرهای برنامه: هر مسیر بصورت یک خط (صاف یا شکسته) که در هر نقطه‌ای یا کاملاً عمودی است و یا کاملاً افقی، از بخشی به بخش دیگر کشیده می‌شود. انتهای مسیر با یک فلش مشخص می‌شود. مسیرها می‌توانند در وسط تصویر با هم تلاقی داشته باشند؛ اما هر تلاقی دقیقاً شامل یک مسیر افقی و یک مسیر عمودی می‌شود و فرض می‌شود که مسیرها در نقاط تلاقی شکستگی ندارند و جهت خود را حفظ می‌کنند. ممکن است یک مسیر به تعداد دلخواه تلاقی و شکستگی داشته باشد و به هر نقطه‌ی دلخواهی از مستطیل دستور و یا دایره‌ی شروع یا پایان متصل باشد؛ اما همیشه تقریباً در نقطه‌ی اتصال (در شکل‌های نام‌برده، بجز شرط‌ها) عمود است.

تنها متغیری که در برنامه استفاده می‌شود، X است که نیازی به تعریف ندارد و ابتدای برنامه مقدارش برابر ۰ است. دستور‌هایی که ممکن است در برنامه بیایند عبارتند از:

  • به شکل X=nX=n که nn یک عدد است و 0n90 \le n \le 9؛ یعنی مقدار متغیر XX را برابر nn قرار بده.
  • به شکل X++X++ که یعنی مقدار XX را یک واحد افزایش بده.
  • به شکل XX-- که یعنی مقدار XX را یک واحد کاهش بده.
  • به شکل PRINT(X)PRINT(X) که یعنی مقدار متغیر XX را در خروجی بنویس در خروجی به سطر جدید برو.
  • به شکل PRINT(n)PRINT(n) که nn یک عدد است و 0n90 \le n \le 9؛ یعنی عدد nn را در خروجی بنویس و در خروجی به سطر جدید برو.

هم‌چنین شرط‌های ممکن عبارتند از:

  • شرط X<nX<n که nn یک عدد است و 0n90 \le n \le 9؛ یعنی آیا مقدار XX کم‌تر از nn است؟
  • شرط X>nX>n که nn یک عدد است و 0n90 \le n \le 9؛ یعنی آیا مقدار XX بیش‌تر از nn است؟
  • شرط X=nX=n که nn یک عدد است و 0n90 \le n \le 9؛ یعنی آیا مقدار XX برابر nn است؟

هم‌چنین فرض کنید که روندنماهای این مسئله، در دور بی‌نهایت نمی‌افتند و هریک از دستورها حداکثر ۲۰ بار اجرا می‌شوند.

یک انسان بسادگی می‌تواند با دیدن چنین روندنمایی، خروجی متناظرش را بدست آورد. حال، آیا شما می‌توانید برنامه‌ای بنویسید که چنین کند؟!

برای ساده‌تر شدن کار، روندنما بصورت تصویر به شما داده نمی‌شود؛ بلکه بصورت تعدادی رشته داده می‌شود. روندنماهای این مسئله با دست کشیده شده‌اند (مانند مثال بالا). ابتدا شکل آن کشیده شده و تبدیل به تعدادی رشته متشکل از کاراکترهای . و # شده که . نمایان‌گر رنگ سفید و # نمایان‌گر رنگ سیاه است. سپس دستورات و نوشته‌ها در داخل رشته‌ها بصورتی که واقعاً نوشته می‌شوند، اضافه می‌شوند و ابعاد جدول نیز به در ابتدای ورودی می‌آید.

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

ورودی🔗

ورودی برنامه‌ی شما، یک روندنما به شکل گفته‌شده است. جدول آن حداکثر ۵۰۰ سطر و حداکثر ۷۰۰ ستون دارد. شکل روندنما برای انسان کاملاً قابل فهم خواهد بود.

خروجی🔗

به ازای هر دستور PRINT که در روندنما اجرا می‌شود، مقدار مربوطه را در یک سطر جدا چاپ دهید.

مثال🔗

ورودی نمونه ۱🔗

ورودی برای شکل داخل صورت سوال در این فایل آمده است.

خروجی نمونه ۱🔗

5
Plain text

ورودی نمونه ۲🔗

ورودی برای شکل زیر در این فایل آمده است.

خروجی نمونه ۲🔗

5
Plain text

توضیح تصویر

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.