P3.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫ﻃﺮاﺣ و ﺗﺤﻠﯿﻞ اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٣۵۴‬‬
‫‪Design and Analysis of Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻗﺪﺳ‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪ ٢۵ :‬ﻓﺮوردﯾﻦ ‪١٣٩۴‬‬
‫ﺗﻤﺮﯾﻦ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴ ‪٣‬‬
‫ﭼﺮخﺑﺎزی‬
‫»ﭼﺮخﺑﺎزی«‪ ،‬ﻫﻤﺎنﻃﻮر ﮐﻪ از اﺳﻤﺶ ﭘﯿﺪاﺳﺖ‪ ،‬ﯾ‬
‫ﺑﺎزی اﺳﺖ ﮐﻪ ﺑﺎ ﺗﻌﺪادی ﭼﺮخ اﻧﺠﺎم ﻣ ﺷﻮد‪ .‬اﻋﺪاد ‪ ٠‬ﺗﺎ ‪ ٩‬ﭘﺸﺖ ﺳﺮ ﻫﻢ‬
‫و ﺳﺎﻋﺖﮔﺮد روی ﻣﺤﯿﻂ ﻫﺮ ﭼﺮخ ﻧﻮﺷﺘﻪ ﺷﺪهاﻧﺪ‪ .‬رﻗﻢﻫﺎی ﺑﺎﻻﯾﯽ ﭼﺮخﻫﺎ ﺗﺸ ﯿﻞ ﯾ‬
‫ﻋﺪد ﺻﺤﯿﺢ ﻣ دﻫﻨﺪ‪ .‬ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل‬
‫وﺿﻌﯿﺖ ﭼﺮخﻫﺎ در ﺷ ﻞ زﯾﺮ ﻋﺪد ‪ ٠١٣٩۴‬را ﻧﺸﺎن ﻣ دﻫﺪ‪ .‬در زﯾﺮ ﻫﺮ ﭼﺮخ دو ﮐﻠﯿﺪ وﺟﻮد دارد‪ .‬ﮐﻠﯿﺪ ﺳﻤﺖ ﭼﭗ ﭼﺮخ را‬
‫ﺑﻪ اﻧﺪازۀ ﯾ‬
‫رﻗﻢ در ﺟﻬﺖ ﺳﺎﻋﺖﮔﺮد ﻣ ﭼﺮﺧﺎﻧﺪ‪ .‬ﮐﻠﯿﺪ ﺳﻤﺖ راﺳﺖ آن را ﺑﻪ اﻧﺪازۀ ﯾ‬
‫رﻗﻢ در ﺟﻬﺖ ﻣﺨﺎﻟﻒ ﻣ ﭼﺮﺧﺎﻧﺪ‪.‬‬
‫‪١٢‬‬
‫‪٦٧‬‬
‫‪٠١‬‬
‫‪٨٩‬‬
‫‪٧٨‬‬
‫‪٦٧‬‬
‫‪١٢‬‬
‫‪٥٦‬‬
‫‪٢٣‬‬
‫‪٣٤‬‬
‫‪٩٠١ ٠١٢ ٢٣٤ ٨٩٠ ٣٤٥‬‬
‫‪٨٩٠ ٣٤٥ ٧٨٩ ٥٦٧ ٤٥٦‬‬
‫ﺷ ﻞ ‪ :١‬ﯾ‬
‫وﺿﻌﯿﺖ از ﭼﺮخﻫﺎ ﮐﻪ ﻋﺪد ‪ ٠١٣٩۴‬را ﻧﺸﺎن ﻣ دﻫﺪ‪.‬‬
‫در آﻏﺎز‪ ،‬ﭼﺮخﻫﺎ در وﺿﻌﯿﺖ »اﺑﺘﺪاﯾﯽ« ﻗﺮار دارﻧﺪ‪ .‬ﺗﻌﺪادی وﺿﻌﯿﺖ »ﻣﻤﻨﻮﻋﻪ« و ﯾ‬
‫ﮔﺎم ﻣ ﺗﻮاﻧﯿﻢ ﯾ‬
‫وﺿﻌﯿﺖ »ﻧﻬﺎﯾﯽ« ﻧﯿﺰ دارﯾﻢ‪ .‬در ﻫﺮ‬
‫از ﮐﻠﯿﺪﻫﺎ را ﻓﺸﺎر دﻫﯿﻢ‪ .‬ﺑﺮﻧﺎﻣﻪای ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺣﺪاﻗﻞ ﺗﻌﺪاد ﮔﺎمﻫﺎی ﻣﻮرد ﻧﯿﺎز ﺑﺮای رﺳﯿﺪن از وﺿﻌﯿﺖ‬
‫اﺑﺘﺪاﯾﯽ ﺑﻪ وﺿﻌﯿﺖ اﻧﺘﻬﺎﯾﯽ را ﺑﯿﺎﺑﺪ‪ ،‬ﻃﻮری ﮐﻪ ﻫﯿﭻﮔﺎه در وﺿﻌﯿﺖ ﻣﻤﻨﻮﻋﻪ ﻗﺮار ﻧﮕﯿﺮﯾﻢ‪.‬‬
‫ورودی‬
‫ﺧﻂ اول ورودی ﺷﺎﻣﻞ ‪ ۵‬رﻗﻢ اﺳﺖ ﮐﻪ وﺿﻌﯿﺖ اوﻟﯿﮥ ﭼﺮخﻫﺎ را ﻧﺸﺎن ﻣ دﻫﻨﺪ‪ .‬در ﺧﻂ ﺑﻌﺪی ﻧﯿﺰ ‪ ۵‬رﻗﻢ ﻣ آﯾﻨﺪ ﮐﻪ ﻧﺸﺎندﻫﻨﺪۀ‬
‫وﺿﻌﯿﺖ ﻧﻬﺎﯾﯽ ﻫﺴﺘﻨﺪ‪ .‬در ﺧﻂ ﺳﻮم ﻋﺪد ﺻﺤﯿﺢ و ﻧﺎﻣﻨﻔ ‪ n‬ﻣ آﯾﺪ ﮐﻪ ﺗﻌﺪاد وﺿﻌﯿﺖﻫﺎی ﻣﻤﻨﻮﻋﻪ اﺳﺖ‪ .‬ﺳﭙﺲ در ‪ n‬ﺧﻂ‬
‫ﺑﻌﺪی‪ ،‬در ﻫﺮ ﺧﻂ ‪ ۵‬رﻗﻢ داده ﻣ ﺷﻮد ﮐﻪ ﯾ‬
‫وﺿﯿﺖ ﻣﻤﻨﻮﻋﻪ را ﺗﻮﺻﯿﻒ ﻣ ﮐﻨﻨﺪ‪ .‬ﻫﺮ دو رﻗﻢ ﻣﺘﻮاﻟ ﺑﺎ ﯾ‬
‫ﺷﺪهاﻧﺪ‪.‬‬
‫‪١‬‬
‫ﻓﺎﺻﻠﻪ از ﻫﻢ ﺟﺪا‬
‫ﺧﺮوﺟ‬
‫در ﺗﻨﻬﺎ ﺳﻄﺮ ﺧﺮوﺟ ﺣﺪاﻗﻞ ﮔﺎمﻫﺎی ﻣﻮرد ﻧﯿﺎز ﺑﺮای رﺳﯿﺪن از وﺿﻌﯿﺖ اﺑﺘﺪاﯾﯽ ﺑﻪ وﺿﻌﯿﺖ اﻧﺘﻬﺎﯾﯽ )ﺑﺪون اﺳﺘﻔﺎده از وﺿﻌﯿﺖﻫﺎی‬
‫ﻣﻤﻨﻮﻋﻪ( را ﭼﺎپ ﮐﻨﯿﺪ‪ .‬اﮔﺮ رﺳﯿﺪن ﺑﻪ وﺿﻌﯿﺖ ﻧﻬﺎﯾﯽ ﻣﻤ ﻦ ﻧﺒﻮد ﻋﺪد ‪ −١‬را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪n ≤ ١٠۵‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪7‬‬
‫‪1 1 1 1 1‬‬
‫‪0 0 0 0 0‬‬
‫‪5‬‬
‫‪1 0 0 0 0‬‬
‫‪0 1 0 0 0‬‬
‫‪0 0 1 0 0‬‬
‫‪0 0 0 1 0‬‬
‫‪0 0 0 0 1‬‬
‫‪-1‬‬
‫‪0 0 0 0 0‬‬
‫‪0 5 3 1 7‬‬
‫‪10‬‬
‫‪0 0 0 0 1‬‬
‫‪0 0 0 0 9‬‬
‫‪0 0 0 1 0‬‬
‫‪0 0 0 9 0‬‬
‫‪0 0 1 0 0‬‬
‫‪0 0 9 0 0‬‬
‫‪0 1 0 0 0‬‬
‫‪0 9 0 0 0‬‬
‫‪1 0 0 0 0‬‬
‫‪9 0 0 0 0‬‬
‫‪٢‬‬
‫ﻋﯿﺪی‬
‫ﻣﺒﯿﻦ ﺧﯿﻠ ﻋﯿﺪی دوﺳﺖ دارد! در ﯾ‬
‫ﻣﻬﻤﺎﻧ ﻋﻤﻮﯾﺶ ﺑﻪ او ﺟﺪوﻟ داد و ﮔﻔﺖ »ﻫﺮ ﭼﻘﺪر ‪ EYDI‬در اﯾﻦ ﺟﺪول ﭘﯿﺪا ﮐﻨ‬
‫ﺑﻪ ﻫﻤﺎن ﺗﻌﺪاد ﺳ ﻪ ﺑﻪ ﺗﻮ ﻋﯿﺪی ﻣ دﻫﻢ«‪ .‬در ﻫﺮ ﺧﺎﻧﮥ ﺟﺪول ﯾ‬
‫از ﺣﺮوف ‪ D ،Y ،E‬و ‪ I‬ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ‪ .‬روش ﺑﺎزی ﺑﻪ‬
‫ﺻﻮرت زﯾﺮ اﺳﺖ‪.‬‬
‫‪ .١‬ﻣﺒﯿﻦ در اﺑﺘﺪا ﯾ‬
‫ﺧﺎﻧﻪ ﺷﺎﻣﻞ ﺣﺮف ‪ E‬ﭘﯿﺪا ﻣ ﮐﻨﺪ‪.‬‬
‫‪ .٢‬ﺧﺎﻧﻪای ﺷﺎﻣﻞ ﺣﺮف ‪ Y‬ﭘﯿﺪا ﻣ ﮐﻨﺪ ﮐﻪ ﻣﺠﺎور ﺑﺎ ﺧﺎﻧﮥ ﻗﺒﻠ ﺑﺎﺷﺪ‪.‬‬
‫‪ .٣‬ﺧﺎﻧﻪای ﺷﺎﻣﻞ ﺣﺮف ‪ D‬ﭘﯿﺪا ﻣ ﮐﻨﺪ ﮐﻪ ﻣﺠﺎور ﺑﺎ ﺧﺎﻧﮥ ﻗﺒﻠ ﺑﺎﺷﺪ‪.‬‬
‫‪ .۴‬ﺧﺎﻧﻪای ﺷﺎﻣﻞ ﺣﺮف ‪ I‬ﭘﯿﺪا ﻣ ﮐﻨﺪ ﮐﻪ ﻣﺠﺎور ﺑﺎ ﺧﺎﻧﮥ ﻗﺒﻠ ﺑﺎﺷﺪ‪.‬‬
‫‪ .۵‬ﯾ‬
‫ﺳ ﻪ ﺑﻪ دﺳﺖ ﻣ آورد!‬
‫‪ .۶‬ﺧﺎﻧﻪای ﺷﺎﻣﻞ ﺣﺮف ‪ E‬ﭘﯿﺪا ﻣ ﮐﻨﺪ ﮐﻪ ﻣﺠﺎور ﺑﺎ ﺧﺎﻧﮥ ﻗﺒﻠ ﺑﺎﺷﺪ‪ .‬ﺳﭙﺲ ﺑﻪ ﮔﺎم دوم ﺑﺮﻣ ﮔﺮدد‪.‬‬
‫اﮔﺮ اﻧﺠﺎم ﻫﺮ ﯾ‬
‫ﮐﻤ‬
‫از ﮔﺎمﻫﺎی ﺑﺎﻻ ﻣﻤ ﻦ ﻧﺒﺎﺷﺪ ﺑﺎزی ﺑﻪ ﭘﺎﯾﺎن ﻣ رﺳﺪ‪ .‬ﻣﺒﯿﻦ از ﺷﻤﺎ ﺧﻮاﺳﺘﻪ ﺑﺮﻧﺎﻣﻪای ﺑﺮای او ﺑﻨﻮﯾﺴﯿﺪ ﺗﺎ ﺑﻪ‬
‫آن ﺑﯿﺶﺗﺮﯾﻦ ﺳ ﻪ را ﺑﻪ دﺳﺖ ﺑﯿﺎورد‪.‬‬
‫ورودی‬
‫در ﺧﻂ اول ورودی دو ﻋﺪد ‪ n‬و ‪ m‬ﻣ آﯾﻨﺪ ﮐﻪ ﺑﻪ ﺗﺮﺗﯿﺐ ﺗﻌﺪاد ﺳﻄﺮﻫﺎ و ﺗﻌﺪاد ﺳﺘﻮنﻫﺎی ﺟﺪول ﻫﺴﺘﻨﺪ‪ n .‬ﺧﻂ ﺑﻌﺪی ﻫﺮ ﮐﺪام‬
‫ﺷﺎﻣﻞ ‪ m‬ﺣﺮف اﺳﺖ‪ ،‬ﺑﻪ اﯾﻦ ﺻﻮرت ﮐﻪ ﺣﺮف ‪j‬اُم از ‪i‬اُﻣﯿﻦ ﺧﻂ )‪ ١ ≤ i ≤ n‬و ‪ (١ ≤ j ≤ m‬ﺣﺮﻓ اﺳﺖ ﮐﻪ در ﺧﺎﻧﮥ‬
‫)‪ (i, j‬از ﺟﺪول ﻗﺮار دارد‪.‬‬
‫ﺧﺮوﺟ‬
‫اﮔﺮ ﻣﺒﯿﻦ ﻧﻤ ﺗﻮاﻧﺪ ﺳ ﻪای ﺑﻪ دﺳﺖ ﺑﯿﺎورد ﻋﺒﺎرت !‪ Poor Mobin‬را ﭼﺎپ ﮐﻨﯿﺪ‪ .‬اﮔﺮ ﻣﺒﯿﻦ ﻣ ﺗﻮاﻧﺪ ﻧﺎﻣﺘﻨﺎﻫ ﺳ ﻪ ﺑﻪ دﺳﺖ‬
‫ﺑﯿﺎورد ﻋﺒﺎرت !‪ Poor Uncle‬را ﭼﺎپ ﻧﻤﺎﯾﯿﺪ‪ .‬در ﻏﯿﺮ اﯾﻦ ﺻﻮرت ﺣﺪاﮐﺜﺮ ﺗﻌﺪاد ﺳ ﻪﻫﺎﯾﯽ را ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﻣﺒﯿﻦ ﻣ ﺗﻮاﻧﺪ ﺑﻪ‬
‫دﺳﺖ ﺑﯿﺎورد‪.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪١ ≤ n, m ≤ ١٠٣‬‬
‫‪٣‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
stdin
1 2
stdout
Poor Mobin!
EY
2 2
Poor Uncle!
DI
YE
5 5
4
EYDIE
EYDIY
EYDID
EEDII
IIDYE
۴