PA1.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫دادهﺳﺎﺧﺘﺎرﻫﺎ و ﻣﺒﺎﻧ اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٢۴۵‬‬
‫‪Data Structures and Fundamentals of Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻗﺪﺳ‬
‫ﻣﻬﻠﺖ ارﺳﺎل‪١٣٩١/٧/٢٨ :‬‬
‫ﺗﻤﺮﯾﻦ ﻋﻤﻠ ‪ -‬ﺷﻤﺎرهی ‪١‬‬
‫• ﺟﻮاب ﺗﻤﺮﯾﻦﻫﺎ را ﻣ ﺑﺎﯾﺴﺖ از ﻃﺮﯾﻖ ﺳﺎﻣﺎﻧﻪی ﺑﺮﺧﻂ ‪ http://learn.inoi.ir‬ارﺳﺎل ﮐﻨﯿﺪ‪.‬‬
‫• ﻧﺎم ﮐﺎرﺑﺮی ﺷﻤﺎ در ﺳﺎﻣﺎﻧﻪی ﺑﺮﺧﻂ ﺷﻤﺎرهی داﻧﺸﺠﻮﯾﯽ ﺷﻤﺎ ﻣ ﺑﺎﺷﺪ‪ .‬ﺗﻨﻬﺎ از اﯾﻦ ﻧﺎم ﮐﺎرﺑﺮی اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪ .‬رﻣﺰ ﺷﻤﺎ‬
‫ﻣﺘﻌﺎﻗﺒﺎ اﻋﻼم ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫• ﺑﺮﻧﺎﻣﻪﻫﺎی ارﺳﺎﻟ ﻣ ﺑﺎﯾﺴﺖ ﺑﻪ ﯾ‬
‫ﯾ‬
‫از ‪ ٣‬زﺑﺎن ‪ C++ ،C‬ﯾﺎ ‪ Java‬ﺑﺎﺷﻨﺪ‪ .‬دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎﯾﺪ ﺳﻮرس ﺑﺮﻧﺎﻣﻪ را ﮐﻪ ﺗﻨﻬﺎ در‬
‫ﻓﺎﯾﻞ آﻣﺪه اﺳﺖ ارﺳﺎل ﮐﻨﯿﺪ و از ارﺳﺎل ﻣﺠﻤﻮﻋﻪ ﻓﺎﯾﻞ ﯾﺎ ‪ zip‬ﺷﺪهی آنﻫﺎ ﺧﻮدداری ﻧﻤﺎﯾﯿﺪ‪ .‬ﻓﺎﯾﻞﻫﺎی ارﺳﺎﻟ ﺑﻪ‬
‫زﺑﺎن ‪ Java‬ﻣ ﺑﺎﯾﺴﺖ ﺗﻨﻬﺎ ﺷﺎﻣﻞ ﯾ‬
‫ﮐﻼس ‪ public‬و دﻗﯿﻘﺎً ﺑﺎ ﻧﺎم ‪ prog‬ﺑﺎﺷﻨﺪ‪.‬‬
‫• ﺗﻤﺎم ﻓﺎﯾﻞﻫﺎی ارﺳﺎﻟ ﺑﻪ ﺳﺎﻣﺎﻧﻪی داوری در اﻧﺘﻬﺎ ﻣﻮرد ﺑﺮرﺳ ﺗﻘﻠﺐ ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ‪ .‬اﻣ ﺎن ﮐﺸﻒ ﺗﻘﻠﺐ ﺣﺘ ﺑﺎ‬
‫ﺗﻐﯿﯿﺮات ﺑﺴﯿﺎر ﻧﯿﺰ ﺗﻮﺳﻂ اﺑﺰارﻫﺎی ﻣﻮﺟﻮد اﻣ ﺎنﭘﺬﯾﺮ اﺳﺖ‪ .‬ﺗﻮﺻﯿﻪ ﻣ ﺷﻮد اﮐﯿﺪاً از اﯾﻦ اﻣﺮ ﺧﻮدداری ﮐﻨﯿﺪ‪.‬‬
‫‪١‬‬
‫ﻧﺎﺑﻪ ﺟﺎﯾﯽ‬
‫در ﯾ‬
‫دﻧﺒﺎﻟﻪ ﺑﻪ ﻃﻮل ‪ n‬از اﻋﺪاد ﺻﺤﯿﺢ ﻣﺜﺒﺖ ﺑﻪ ﺻﻮرت ‪ a١ , a٢ , , an‬ﯾ‬
‫ﻧﺎﺑﺠﺎﯾﯽ‪ ،‬زوﺟ ﻣﺎﻧﻨﺪ )‪ (i, j‬ﻣ ﺑﺎﺷﺪ ﮐﻪ‬
‫‪ ١ ≤ i < j ≤ n‬ﻣ ﺑﺎﺷﺪ ﮐﻪ ‪ ai > a j‬ﺑﺎﺷﺪ‪ .‬ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺮﻧﺎﻣﻪ ای ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺎ ﮔﺮﻓﺘﻦ دﻧﺒﺎﻟﻪ ‪ a١ , a٢ , , an‬ﺗﻌﺪاد ﮐﻞ‬
‫ﻧﺎﺑﺠﺎﯾﯽ ﻫﺎی اﯾﻦ دﻧﺒﺎﻟﻪ را ﺑﺪﺳﺖ آورد‪.‬‬
‫ورودی‬
‫در ﺧﻂ اول ورودی ﻋﺪد ‪ n‬و در ﺧﻂ دوم ‪ n‬ﻋﺪد آﻣﺪه اﻧﺪ ﮐﻪ ﺑﻪ ﺗﺮﺗﯿﺐ ﻧﻤﺎﯾﺸ ﺮ اﻋﺪاد ‪ a١ , a٢ , , an‬ﻣﯿﺒﺎﺷﺪ‪.‬‬
‫ﺧﺮوﺟ‬
‫در ﺗﻨﻬﺎ ﺧﻂ ﺧﺮوﺟ ﺗﻌﺪاد ﻧﺎﺑﺠﺎﯾﯽ ﻫﺎی دﻧﺒﺎﻟﻪ ورودی را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪5‬‬
‫‪3‬‬
‫‪2 3 1 5 4‬‬
‫‪١‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪١ ≤ n ≤ ١٠٠٠٠٠‬‬
‫‪١ ≤ ai ≤ ١٠٩‬‬
‫‪ ai‬ﻫﺎ ﻫﻤ‬
‫‪٢‬‬
‫ﻣﺘﻤﺎﯾﺰﻧﺪ‬
‫ﺗﻮده ﮐﺘﺎب ﻫﺎ‬
‫‪ n‬ﮐﺘﺎب روی ﻫﻢ ﺑﺮ روی ﯾ‬
‫• ﯾ‬
‫ﻣﯿﺰ ﻗﺮار ﮔﺮﻓﺘﻪ اﻧﺪ‪ .‬دو ﻋﻤﻞ ﺑﺮ روی اﯾﻦ ﮐﺘﺎﺑﻬﺎ ﻣﯿﺘﻮان اﻧﺠﺎم داد‪.‬‬
‫ﮐﺘﺎب ﺟﺪﯾﺪ را ﺑﺮ روی ﻫﻤﻪ ﮐﺘﺎب ﻫﺎ ﻗﺮار داد‪.‬‬
‫• ﺗﺮﺗﯿﺐ‪ k‬ﮐﺘﺎب ﺑﺎﻻی اﯾﻦ ﺗﻮده را ﺑﺮﻋﮑﺲ ﮐﺮد‪ .‬اﮔﺮ ﮐﻤﺘﺮ از ‪ k‬ﮐﺘﺎب ﺑﺮروی ﻣﯿﺰ ﺑﺎﺷﺪ ﺗﺮﺗﯿﺐ ﻫﻤﻪ ‪ k‬ﮐﺘﺎب ﺑﺮﻋﮑﺲ‬
‫ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫ﻋﻤﻞ اول ﺑﺎ )‪ ADD(s‬ﻣﺸﺨﺺ ﺧﻮاﻫﺪ ﺷﺪ ﮐﻪ ‪ s‬ﻧﺎم ﮐﺘﺎب ﻣ ﺑﺎﺷﺪ و ﻋﻤﻞ دوم ﺑﺎ ‪ ROTATE‬ﻣﺸﺨﺺ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺗﻌﺪاد‬
‫ﮐﻞ ﮐﺘﺎب ﻫﺎ از ‪ ۴٠٠٠٠‬ﺑﯿﺸﺘﺮ ﻧﺨﻮاﻫﺪ ﺑﻮد و اﺳﻢ ﻫﺮ ﮐﺘﺎب ﯾ‬
‫رﺷﺘﻪ از ﺣﺮوف ﺑﺰرگ اﻟﻔﺒﺎی اﻧﮕﻠﯿﺴ ﺑﺎ ﻃﻮل ﺣﺪاﮐﺜﺮ ‪٣‬‬
‫ﺧﻮاﻫﺪ ﺑﻮد‪ .‬ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺮﻧﺎﻣﻪ ای ﺑﻨﻮﯾﺴﯿﺪ ﮐﻪ ﺑﺎ درﯾﺎﻓﺖ ﺗﺮﺗﯿﺐ ﮐﺘﺎب ﻫﺎ و ﻋﻤﻠﯿﺎت اﻧﺠﺎم ﺷﺪه ﺑﺮ روی آﻧﻬﺎ ﺗﺮﺗﯿﺐ ﻧﻬﺎﯾﯽ آن ﻫﺎ‬
‫را ﻣﺸﺨﺺ ﮐﻨﺪ‪.‬‬
‫ورودی‬
‫در ﺧﻂ اول ورودی اﻋﺪاد ‪ m ،n‬و ‪ k‬ﻣ آﯾﻨﺪ‪ .‬در ‪ n‬ﺧﻂ ﺑﻌﺪ در ﻫﺮ ﺧﻂ ﻧﺎم ﯾ‬
‫ﮐﺘﺎب ﻣﻮﺟﻮد ﺑﺮ روی ﻣﯿﺰ ﺑﻪ ﺗﺮﺗﯿﺐ از ﺑﺎﻻ ﺑﻪ‬
‫ﭘﺎﯾﯿﻦ آﻣﺪه اﺳﺖ‪ .‬در ‪ m‬ﺧﻂ ﺑﻌﺪ از آن در ﻫﺮ ﺧﻂ ﻋﻤﻠﯿﺎت اﻧﺠﺎم ﺷﺪه ﺑﺮ روی ﺗﻮده ﮐﺘﺎب ﻫﺎ ﻧﻮﺷﺘﻪ ﺷﺪه اﺳﺖ‬
‫ﺧﺮوﺟ‬
‫در ﺧﺮوﺟ ﺗﺮﺗﯿﺐ ﻧﻬﺎﯾﯽ ﻗﺮار ﮔﺮﻓﺘﻦ ﮐﺘﺎب ﻫﺎ ﭘﺲ از اﻋﻤﺎل ﻋﻤﻠﯿﺎت ﺑﯿﺎن ﺷﺪه در ورودی را ﺑﻨﻮﯾﺴﯿﺪ‪ .‬در ﻫﺮ ﺧﻂ ﻧﺎم ﯾ‬
‫ﮐﺘﺎب را ﺑﻪ ﺗﺮﺗﯿﺐ از ﺑﺎﻻﺗﺮﯾﻦ ﮐﺘﺎب ﺗﺎ ﭘﺎﯾﯿﻦ ﺗﺮﯾﻦ ﮐﺘﺎب ﺑﻨﻮﯾﺴﯿﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪D‬‬
‫‪2 3 2‬‬
‫‪A‬‬
‫‪A‬‬
‫‪C‬‬
‫‪B‬‬
‫‪B‬‬
‫)‪ADD(C‬‬
‫‪ROTATE‬‬
‫)‪ADD(D‬‬
‫‪٢‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪٠ ≤ n, k ≤ ۴٠٠٠٠‬‬
‫‪٠ ≤ m ≤ ١٠٠٠٠٠‬‬
‫‪٣‬‬