اولین باره که به کاهو میای؟ راهنمای سایت رو حتما بخون!
سوال ۱ روز دوم مرحله ۲ دوره ۲۳: رشتهی نزدیک
بازی رنگی - سوال ۱ - مرحله ۲ - ۱۳۹۳
وزنهها و ماشین جادویی - سوال ۲ - مرحله ۲ - ۱۳۹۳
گاوی خسیس - سوال ۳ - مرحله ۲ - ۱۳۹۳
انتقال مهرههای گاوی - سوال ۴ - مرحله ۲ - ۱۳۹۳
یافتن کوچکترین پیچ و مهره با مقایسه آنها
دنباله و جادوگر - دوره ی 24 - مرحله ی 2
مسئله ی مسیر و شبکه - مرحله ی 2 – دوره ی 23
در این قسمت میتونی به یک پرسش پاسخ بدی. اگه میخوای در مورد پرسش بحث و اظهار نظر کنی از قسمت «ثبت نظر» استفاده کن.
پاسخت رو دقیق و کامل بنویس، از عکس استفاده کن و اگه لازمه به منابع (کتاب یا سایت) ارجاع بده.
اگه پرسش یا پاسخها مفید هستند حتما بهشون رای بده تا پرسشها و پاسخهای خوب مشخص بشن.
توی قسمت پیشنمایش میتونی ببینی متنی که نوشتی چجوری روی سایت دیده میشه.
خیلی مهم: برای اینکه به خط بعد بری باید دوتا Enter بزنی.
میتونی از تگهای معمولی و سادهی html هم استفاده کنی.
با دکمههایی که بالای ویرایشگر قرار دارند کلی کار میشه کرد. از عکسگذاشتن بگیر تا لیست شمارهدار. حتما امتحانشون کن.
برای نوشتن علائم ریاضی میتونی از Mathjax استفاده کنی.
راهنمای Mathjax رو از سایت
math.stackexchange
بخون.
برای نوشتن عبارت ریاضی وسط جمله، اون عبارت رو بین دوتا $ قرار بده.
برای نوشتن عبارت ریاضی تو یه خط جدید اون رو بین دوتا $$ قرار بده.
دستگاهی مانند شکل زیر را در نظر بگیرید:
در هر یک از ورودیهای ۱، ۲ و ۳ میتوانیم یک گلوله بیندازیم. این گلوله بهسوی پایین حرکت میکند و با توجه به وضعیت کلیدهای $x$، $y$ و $z$ از یکی از خروجیهای $A$، $B$ یا $C$ خارج میشود. کلیدهای $x$ ، $y$ و $z$ به این صورت عمل میکنند: هر کلید میتواند در یکی از دو وضعیت $\searrow$ یا $\swarrow$ باشد. اگر کلید در وضعیت $\searrow$ باشد، گلوله را به سمت راست و اگر در وضعیت $\swarrow$ باشد، گلوله را به سمت چپ میفرستد. علاوه بر این با عبور هر گلوله از یک کلید، وضعیت آن کلید تغییر میکند.
در ابتدای شروع کار دستگاه، هر سه کلید در وضعیت هستند. یک دنباله مانند $a_1 a_2…a_n$({$1,2,3$}$a_i∈$ به ازای هر $i$) بهعنوان دنبالهی ورودی دستگاه داده میشود. پس از این ابتدا یک گلوله از ورودی شمارهی $a_1$ ، سپس یک گلوله از ورودی شمارهی $a_2$ … و در انتها یک گلوله از ورودی شمارهی $a_n$ به درون دستگاه میاندازیم. فرض میکنیم که گلولهها به ترتیب از خروجیهای $٬b_2٬b_1$، … و$b_n$ خارج شوند ( {$A,B,C$}$b_i∈$ به ازای هر $i$) دنبالهی $b_1 b_2…b_n$ را دنبالهی خروجی دستگاه برای ورودی $a_1 a_2…a_n$ مینامیم.
به عنوان مثال دنبالهی خروجی دستگاه برای ورودی ۱۲۳۲۱، دنبالهی ABBCA است.
الف) الگوریتمی بنویسید که با دریافت یک دنبالهی ورودی، دنبالهی خروجی آن را پیدا کند.
ب) الگوریتمی بنویسید که با دریافت یک دنبالهی $s_1 s_2…s_n$ ({$A,B,C$}$s_i∈$ به ازای هر $i$) مشخص کند که آیا این دنباله میتواند خروجی دستگاه باشد یا خیر؟ الگوریتم شما باید سریع باشد، یعنی امتحان کردن تمام حالتها مورد نظر نیست.
الف :
به ازای انداختن هر گلوله با توجه به مسیرفلش ها خروجی آن را مشخص میکنیم و تغییرات ایجاد شده در جهت فلش ها را اعمال میکنیم.
ب :
حالات مسئله را به یک گرافی با 8 راس متناظر میکنیم که در آن راس $i$ به راس $j$ یال دارد اگر و تنها اگر از حالت $i$ بتوان به حالت $j$ رسید. از طرفی روی یال بین $i$ و $j$ یک جرف از حروف $A$، $B$ یا $C$ را مینویسیم که نشان دهنده ی این است که اگر بخواهیم به این حالت برسیم باید در ورودی ای گلوله بندازیم بطوری که گلوله از این ورودی وارد خروجی ای شود که برابر با حرف روی یال است. (ممکن است بین دو راس بیش از یک یال باشد)
فرض کنید $dp_{i,j}$ زمانی یک است که بتوان $i$ حرف اول رشته را بگونه ای ساخت که حالت نهایی مانند حالت متانظر با راس $j$ ام باشد. در غیر این صورت $dp_{i,j}$ برابر صفر است. اگر راس متانظر با راس اولیه راس یکم باشد در ابتدای کار تنها $dp_{0,1}$ برابر 1 وبقیه ی $dp$ ها برابر صفرند.
حال از عضو اول رشته شروع میکنیم و در مرحله $i$ ام $dp_{i,r}$ را مساوی یک قرار میدهیم، اگر و تنها اگر راس $r$ همسایه ای مانند $j$ داشته باشد که:
( $dp_{i-1,j}=1$)
روی یال بین راس $r$ و $j$ حرف $s_i$ نوشته شده باشد.
از آنجا که 8 راس داریم و به هر راس سه یال متصل است (به ازای انداختن گلوله در هر یک از سه ورودی هر کدام یک یال) پس در حداکثر $n \times 8 \times 3 = 24 \times n$ به جواب میرسیم (اگر $i$ ای وجود داشت $(1 \le i \le 8)$ که $dp_{n,i}=1$ یعنی دنباله می تواند خروجی دستگاه باشد، و در غیر این صورت یعنی نمیتواند)