proj1.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫ﻣﺒﺎﻧ ﺳﺎﺧﺘﻤﺎن دادهﻫﺎ و اﻟ ﻮرﯾﺘﻢﻫﺎ )‪(۴٠-٢۵۴‬‬
‫‪Introduction to Data Structures and Algorithms‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﻣﺪرس‪ :‬ﻣﺤﻤﺪ ﻋﻠ آﺑﺎم‬
‫ﻣﻮﻋﺪ ارﺳﺎل‪ ١۵ :‬ﻓﺮوردﯾﻦ ‪١٣٩١‬‬
‫ﺗﻤﺮﯾﻦ ﻋﻤﻠ ‐ ﺷﻤﺎرهی ‪١‬‬
‫• در ﺗﻤﺎم ﺳﻮاﻻت ﻣﺤﺪودﯾﺖ زﻣﺎﻧ ‪ ٣‬ﺛﺎﻧﯿﻪ و ﻣﺤﺪودﯾﺖ ﺣﺎﻓﻈﻪ ‪ ٢٠‬ﻣ ﺎﺑﺎﯾﺖ ﻣ ﺑﺎﺷﺪ‪.‬‬
‫• ﺟﻮاب ﺗﻤﺮﯾﻦﻫﺎ را ﻣ ﺑﺎﯾﺴﺖ از ﻃﺮﯾﻖ ﺳﺎﻣﺎﻧﻪی ﺑﺮﺧﻂ ‪ http://learn.inoi.ir‬ارﺳﺎل ﮐﻨﯿﺪ‪.‬‬
‫• ﻧﺎم ﮐﺎرﺑﺮی ﺷﻤﺎ در ﺳﺎﻣﺎﻧﻪی ﺑﺮﺧﻂ ﺷﻤﺎرهی داﻧﺸﺠﻮﯾﯽ ﺷﻤﺎ ﻣ ﺑﺎﺷﺪ‪ .‬ﺗﻨﻬﺎ از اﯾﻦ ﻧﺎم ﮐﺎرﺑﺮی اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪.‬‬
‫• ﺑﺮﻧﺎﻣﻪﻫﺎی ارﺳﺎﻟ ﻣ ﺑﺎﯾﺴﺖ ﺑﻪ ﯾ‬
‫ﯾ‬
‫از ‪ ٣‬زﺑﺎن ‪ C++ ،C‬ﯾﺎ ‪ Java‬ﺑﺎﺷﻨﺪ‪ .‬دﻗﺖ ﮐﻨﯿﺪ ﮐﻪ ﺑﺎﯾﺪ ﺳﻮرس ﺑﺮﻧﺎﻣﻪ را ﮐﻪ ﺗﻨﻬﺎ در‬
‫ﻓﺎﯾﻞ آﻣﺪه اﺳﺖ ارﺳﺎل ﮐﻨﯿﺪ و از ارﺳﺎل ﻣﺠﻤﻮﻋﻪ ﻓﺎﯾﻞ ﯾﺎ ‪ zip‬ﺷﺪهی آنﻫﺎ ﺧﻮدداری ﻧﻤﺎﯾﯿﺪ‪ .‬ﻓﺎﯾﻞﻫﺎی ارﺳﺎﻟ ﺑﻪ‬
‫زﺑﺎن ‪ Java‬ﻣ ﺑﺎﯾﺴﺖ ﺗﻨﻬﺎ ﺷﺎﻣﻞ ﯾ‬
‫ﮐﻼس ‪ public‬و دﻗﯿﻘﺎ ﺑﺎ ﻧﺎم ‪ prog‬ﺑﺎﺷﻨﺪ‪.‬‬
‫• ﺗﻤﺎم ﻓﺎﯾﻞﻫﺎی ارﺳﺎﻟ ﺑﻪ ﺳﺎﻣﺎﻧﻪی داوری در اﻧﺘﻬﺎ ﻣﻮرد ﺑﺮرﺳ ﺗﻘﻠﺐ ﻗﺮار ﺧﻮاﻫﻨﺪ ﮔﺮﻓﺖ‪ .‬اﻣ ﺎن ﮐﺸﻒ ﺗﻘﻠﺐ ﺣﺘ ﺑﺎ‬
‫ﺗﻐﯿﯿﺮات ﺑﺴﯿﺎر ﻧﯿﺰ ﺗﻮﺳﻂ اﺑﺰارﻫﺎی ﻣﻮﺟﻮد اﻣ ﺎنﭘﺬﯾﺮ اﺳﺖ‪ .‬ﺗﻮﺻﯿﻪ ﻣ ﺷﻮد اﮐﯿﺪا از اﯾﻦ اﻣﺮ ﺧﻮدداری ﮐﻨﯿﺪ‪.‬‬
‫‪١‬‬
‫ﺗﺎﺧﯿﺮ دﺳﺘﻮارت‬
‫در ﺷﺒﯿﻪ ﺳﺎزی ﯾ‬
‫ﺗﺎﺧﯿﺮ اﺟﺮا دارﻧﺪ اﺟﺮا ﺷﺪهاﻧﺪ و ﺗﺎﺧﯿﺮ ﻫﺮ دﺳﺘﻮر ﺑﺎ دﻗﺖ ‪ns‬‬
‫ﻣﺎﺷﯿﻦ ﻓﺮﺿ ‪ n ،‬دﺳﺘﻮر ﮐﻪ ﻫﺮ ﮐﺪام ﯾ‬
‫اﻧﺪازهﮔﯿﺮی ﺷﺪه اﺳﺖ‪ .‬ﺣﺎل ﺑﺮای اﯾﻨﮑﻪ ﻣﺘﻮﺟﻪ ﺷﻮﯾﻢ اﯾﻦ ﺑﺮﻧﺎﻣﻪ روی اﯾﻦ ﻣﺎﺷﯿﻦ ﺑﺎ ﭼﻪ ﺳﻄ ﮐﺎراﯾﯽای ﮐﺎر ﻣ ﮐﻨﺪ اﯾﻦ دادهﻫﺎ‬
‫را ﺑﺎ دو روش ﻣﻮرد ﺑﺮرﺳ ﻗﺮار ﻣ دﻫﯿﻢ‪.‬‬
‫ﯾ‬
‫ﻓﺎﮐﺘﻮر ﮐﻪ ﺑﺮاﯾﻤﺎن ﻣﻬﻢ اﺳﺖ اﯾﻦ اﺳﺖ ﮐﻪ دﺳﺘﻮر ‪i‬ام ﺗﺎ دﺳﺘﻮر ‪j‬ام ﺟﻤﻌﺎً روی ﻫﻢ ﺑﺮ ﺣﺴﺐ ‪ ns‬ﭼﻘﺪر زﻣﺎن ﻣﺼﺮف ﮐﺮدهاﻧﺪ‪.‬‬
‫ﻓﺎﮐﺘﻮر دﯾ ﺮی ﮐﻪ ﺣﺎﺋﺰ اﻫﻤﯿﺖ اﺳﺖ ﺣﺪاﮐﺜﺮ ﺗﺎﺧﯿﺮ ﺑﯿﻦ ﯾ‬
‫‪k‬ﺗﺎی ﻣﺘﻮاﻟ از دﺳﺘﻮرات اﺳﺖ‪ k) .‬ﯾ‬
‫ﻋﺪد ﺛﺎﺑﺖ اﺳﺖ ﮐﻪ در‬
‫ورودی داده ﻣ ﺷﻮد‪(١ .‬‬
‫ورودی‬
‫در ﺧﻂ اول ورودی دو ﻋﺪد ﺻﺤﯿﺢ ‪ n‬و ‪ k‬آﻣﺪهاﻧﺪ ﮐﻪ ‪ n‬ﻧﺸﺎندﻫﻨﺪهی ﺗﻌﺪاد ﮐﻞ دﺳﺘﻮرات اﺟﺮا ﺷﺪه اﺳﺖ و ‪ k‬ﻫﻤﺎن ﻋﺪد ﺛﺎﺑﺘ‬
‫اﺳﺖ ﮐﻪ ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﺘﻮاﻧﺪ ﻣﺎﮐﺴﯿﻤﻢ ﺗﺎﺧﯿﺮ ﺑﯿﻦ ﻫﺮ ‪ k‬ﺗﺎﺧﯿﺮ ﻣﺘﻮاﻟ را اﻋﻼم ﮐﻨﺪ‪.‬‬
‫در ﺧﻂ دوم ‪ n‬ﻋﺪد ﺻﺤﯿﺢ آﻣﺪه ﮐﻪ ﻋﺪد ‪i‬ام ﺗﺎﺧﯿﺮ دﺳﺘﻮر ‪i‬ام اﺳﺖ‪.‬‬
‫ﺧﻂ ﺳﻮم ﺗﻨﻬﺎ ﺣﺎوی ﯾ‬
‫ﻋﺪد ‪ q‬اﺳﺖ ﮐﻪ ﺗﻌﺪاد ﭘﺮﺳﺶﻫﺎ اﺳﺖ‪.‬‬
‫در ‪ q‬ﺧﻂ ﺑﻌﺪ در ﻫﺮ ﺧﻂ ﯾ‬
‫ﭘﺮﺳﺶ ﺑﻪ ﯾ‬
‫از دو ﻓﺮﻣﺖ زﯾﺮ آﻣﺪه اﺳﺖ‪ .‬ﺑﻪ ﻫﺮ ﭘﺮﺳﺶ ﯾ‬
‫• ‪ : SUM i j‬اﯾﻦ ﭘﺮﺳﺶ ﺟﻤ ﺗﺎﺧﯿﺮ دﺳﺘﻮر ‪i‬ام ﺗﺎ دﺳﺘﻮر ‪j‬ام را ﺑﺮ ﺣﺴﺐ ‪ ns‬ﻣ ﭘﺮﺳﺪ‪.‬‬
‫• ‪ : MAX i‬اﯾﻦ ﭘﺮﺳﺶ ﻣﺎﮐﺴﯿﻤﻢ ‪i‬اﻣﯿﻦ ‪k‬ﺗﺎی ﻣﺘﻮاﻟ را ﻣ ﭘﺮﺳﺪ‪.‬‬
‫‪١‬اﮔﺮ ﻫﻨﻮز ﻣﺘﻮﺟﻪ ﻧﺸﺪﯾﺪ ﺑﺨﺶ ورودی را ﻣﻄﺎﻟﻌﻪ ﺑﻔﺮﻣﺎﯾﯿﺪ‪.‬‬
‫‪١‬‬
‫ﺟﻮاب در ﯾ‬
‫ﺧﻂ ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﺧﺮوﺟ‬
‫ﺑﻪ ازای ﻫﺮ ﭘﺮﺳﺶ ﭘﺎﺳ آن را ﮐﻪ ﯾ‬
‫ﻋﺪد اﺳﺖ در ﯾ‬
‫ﺧﻂ ﺟﺪاﮔﺎﻧﻪ ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪١ ≤ n ≤ ١٠٠, ٠٠٠‬‬
‫‪١≤k≤n‬‬
‫‪١ ≤ q ≤ ١٠٠, ٠٠٠‬‬
‫ﺗﺎﺧﯿﺮﻫﺎی دﺳﺘﻮرات ﺑﯿﻦ ﺻﻔﺮ ﺗﺎ ‪ ١٠٩‬ﻫﺴﺘﻨﺪ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪3‬‬
‫‪6 3‬‬
‫‪5‬‬
‫‪1 2 5 2 4 1‬‬
‫‪14‬‬
‫‪4‬‬
‫‪4‬‬
‫‪SUM 1 2‬‬
‫‪MAX 1‬‬
‫‪SUM 2 6‬‬
‫‪MAX 4‬‬
‫‪٢‬‬
‫ﯾ‬
‫ﻣﻘﺎﯾﺴﻪی ﺳﺨﺖاﻓﺰاری‬
‫ﺷﺮﮐﺖ ﺗﻮﻟﯿﺪ ﭘﺮدازﺷ ﺮ‪ n ،‬ﭘﺮدازﺷ ﺮ ‪ ٢‬ﻣﺘﻔﺎوت ﮐﻪ ﻫﺮﮐﺪام ﯾ‬
‫ﻓﺮﮐﺎﻧﺲ ﮐﺎری و ﺗﻮان ﻣﺼﺮﻓ ﻣﺘﻔﺎوت دارﻧﺪ ﺗﻮﻟﯿﺪ ﮐﺮده‬
‫اﺳﺖ‪ .‬ﭘﺮدازﺷ ﺮ ‪ C١‬را ﻣ ﮔﻮﯾﯿﻢ اﮐﯿﺪا ﺑﻬﺘﺮ از ﭘﺮدازﺷ ﺮ ‪ C٢‬اﺳﺖ اﮔﺮ ‪ C١‬ﻧﺴﺒﺖ ﺑﻪ ‪ C٢‬ﻓﺮﮐﺎﻧﺲ ﮐﺎری ﺑﺎﻻﺗﺮ و ﺗﻮان ﻣﺼﺮﻓ‬
‫ﮐﻤﺘﺮی داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫ﺣﺎل اﯾﻦ ﺷﺮﮐﺖ ﻣ ﺧﻮاﻫﺪ ﺗﻌﺪاد دوﺗﺎﯾﯽﻫﺎی ﭘﺮدازشﮔﺮﻫﺎﯾﺶ را ﺑﺪاﻧﺪ ﮐﻪ ﯾ‬
‫از دﯾ ﺮی اﮐﯿﺪا ﺑﻬﺘﺮ ﺑﺎﺷﺪ‪.‬‬
‫ورودی‬
‫در ﺧﻂ اول ورودی ﺗﻨﻬﺎ ﻋﺪد ‪ n‬آﻣﺪه اﺳﺖ ﮐﻪ ﺗﻌﺪاد ﭘﺮدازشﮔﺮﻫﺎی ﺗﻮﻟﯿﺪ ﺷﺪه اﺳﺖ‪ .‬در ‪ n‬ﺧﻂ ﺑﻌﺪی در ﻫﺮ ﺧﻂ دو ﻋﺪد‬
‫ﺻﺤﯿﺢ ﻣﺜﺒﺖ ‪ Fi Pi‬آﻣﺪه اﺳﺖ ﮐﻪ ﻋﺪد اول ) ‪ (Fi‬ﻓﺮﮐﺎﻧﺲ ﮐﺎری )‪ (Hz‬و ﻋﺪد دوم ) ‪ (Pi‬ﺗﻮان ﻣﺼﺮﻓ )‪ (µW‬ﭘﺮدازﺷ ﺮ ‪i‬ام‬
‫اﺳﺖ‪.‬‬
‫‪Processor٢‬‬
‫‪٢‬‬
‫ﺧﺮوﺟ‬
‫در ﺗﻨﻬﺎ ﺳﻄﺮ ﺧﺮوﺟ ﯾ‬
‫ﻋﺪد ﮐﻪ ﺗﻌﺪاد دوﺗﺎﯾﯽﻫﺎی ﭘﺮدازﺷ ﺮﻫﺎﺳﺖ ﮐﻪ ﯾ‬
‫اﮐﯿﺪا ﺑﻬﺘﺮ از دﯾ ﺮی اﺳﺖ را ﭼﺎپ ﮐﻨﯿﺪ‪.‬‬
‫ﻣﺤﺪودﯾﺖﻫﺎ‬
‫‪١ ≤ n ≤ ١٠۵‬‬
‫‪١ ≤ Fi ≤ ١٠٩‬‬
‫‪١ ≤ Pi ≤ ١٠٩‬‬
‫ﻓﺮﮐﺎﻧﺲ ﮐﺎری ‪ n‬ﭘﺮدازﺷ ﺮ دو ﺑﻪ دو ﻣﺘﻤﺎﯾﺰ اﺳﺖ‪.‬‬
‫ﺗﻮان ﻣﺼﺮﻓ ‪ n‬ﭘﺮدازﺷ ﺮ دو ﺑﻪ دو ﻣﺘﻤﺎﯾﺰ اﺳﺖ‪.‬‬
‫ورودی و ﺧﺮوﺟ ﻧﻤﻮﻧﻪ‬
‫‪stdin‬‬
‫‪stdout‬‬
‫‪4‬‬
‫‪4‬‬
‫‪3000000 150000‬‬
‫‪1000000 100000‬‬
‫‪4000000 50000‬‬
‫‪2000000 200000‬‬
‫‪٣‬‬