Processing math: 100%

المپدیا

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

ابزار کاربر

ابزار سایت


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

عبارت جمع

منظور از یک عبارت جمع، رشته‌ایست که تعریف بازگشتی زیر را برآورده می‌کند:

  • هر حرف کوچک لاتین، یک عبارت جمع است.
  • اگر s و t دو عبارت جمع باشند، (s+t) هم یک عبارت جمع است.

بر روی عبارت‌های جمع، دو عمل زیر تعریف می‌شود.

عمل جابجایی در اثر این عمل، عبارت Xs+tY به Xt+sY‌تبدیل می‌شود.

عمل شرکت‌پذیری پس از اعمال آن، عبارت‌های Xs+(t+u)Y و X(s+t)+uY به هم تبدیل می‌شوند.

توضیح آن‌که X و Y به نشانه‌ی یک رشته از نویسه‌های «)»، «(»، «+» و «a» تا «z» و همچنین s، t و u به نشانه‌ی یک عبارت جمع به کار رفته‌اند.

به عنوان مثال عمل جابه‌جایی می‌تواند عبارت جمع ((a+(c+b))+z) را به یکی از عبارت‌های ((a+(b+c))+z)، (((c+b)+a)+z) و (z+(a+(c+b))) تبدیل کند. همچنین عمل شرکت‌پذیری این عبارت را به یکی از عبارت‌های (((a+c)+b)+z) و (a+((c+b)+z)) تبدیل می‌کند.

برنامه‌ای بنویسید که دو عبارت جمع s و t را از ورودی بخواند و رشته‌ای از عبارت‌های جمع به شکل u2،u1،u0، …، uk را بیابد به طوری که u0=s و uk=t باشد و به ازای هر i که k<i0، ui با یکی از تبدیل‌های گفته شده قابل تبدیل به ui+1 باشد.

ورودي

فایل ورودی شامل دو سطر است؛ در سطر نخست s و در سطر بعد t آمده است. فرض کنید طول این دو رشته از ۲۵۵ بیش‌تر نیست. برنامه‌ی شما باید در ظرف حداکثر ۲۰ ثانیه اجرای خود را خاتمه دهد.

خروجي

فایل خروجی باید شامل k سطر باشد؛ در سطر اول k و در سطر i+1 ام (1ik1) آن ui را آمده باشد.

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

ورودي نمونه خروجي نمونه
((a+(b+c))
(b+(a+c))
‎2
(a+(c+b))
((a+c)+b)

ابزار صفحه