ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟﻲ ﭘﺮوژهي ﭘﺎﻳﺎﻧﻲ درس دادهﺳﺎﺧﺘﺎرﻫﺎ و اﻟﮕﻮرﻳﺘﻢﻫﺎ ﻣﺪرس :ﻋﻠﻲ ﺷﺮﻳﻔﻲ زارﭼﻲ دﺳﺘﻴﺎران ﭘﺮوژه :وﺣﻴﺪ ﻟﻴﺎﻗﺖ ،اﻣﻴﺮﺣﺴﻴﻦ ﻛﺪﻳﻮر ،اﻓﺸﻴﻦ ﻧﻴﻜﺰاد ﺗﺮم دوم ﺳﺎل 88-87 داﻧﺸﺠﻮﻳﺎن ﻋﺰﻳﺰ: • از ﺑﻴﻦ 4ﻣﻮﺿﻮع زﻳﺮ ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ درﺳﺖ 2ﻣﻮﺿﻮع ﺑﺎﻋﺚ درﻳﺎﻓﺖ ﻛﻞ 4ﻧﻤﺮه ﭘﺮوژه ﭘﺎﻳﺎﻧﻲ ﻣﻲﮔﺮدد .اراﺋﻪ ﺑﺮﻧﺎﻣﻪ درﺳﺖ ﺑﺮاي 3ﻣﻮﺿﻮع ﺑﻪ اﻓﺰاﻳﺶ ﻧﻤﺮه ﭘﺮوژه ﺗﺎ ﺳﻘﻒ 6ﻧﻤﺮه ﺧﻮاﻫﺪ ﺑﻮد .ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ درﺳﺖ ﻫﺮ 4ﻣﻮﺿﻮع ﻋﻼوه ﺑﺮ 6ﻧﻤﺮه ﭘﺮوژه ،در ﻳﺎدﮔﻴﺮي ﺑﻬﺘﺮ درس ﻣﻮﺛﺮ اﺳﺖ. • ﺑﻴﺸﻴﻨﻪي ﻧﻤﺮهي ﭘﺮوژهي ﭘﺎﻳﺎﻧﻲ و اﻣﺘﺤﺎن ﻋﻤﻠﻲ اول ﺑﻪ ﻋﻨﻮان ﻧﻤﺮهي ﻋﻤﻠﻲ ﺛﺒﺖ ﺧﻮاﻫﺪ ﺷﺪ .ﻟﺬا اﻧﺠﺎم اﻳﻦ ﭘﺮوژه ﺑﺮاي داﻧﺸﺠﻮﻳﺎﻧﻲ ﻛﻪ از اﻣﺘﺤﺎن ﻋﻤﻠﻲ ﺧﻮد ﻧﻤﺮه رﺿﺎﻳﺖﺑﺨﺸﻲ درﻳﺎﻓﺖ ﻧﻤﻮدهاﻧﺪ ﺿﺮورﺗﻲ ﻧﺪارد ،ﻫﺮﭼﻨﺪ ﺑﺮاي اﻓﺰاﻳﺶ ﻣﻬﺎرت ﻋﻤﻠﻲ درﺳﻲ ﺗﻮﺻﻴﻪ ﻣﻲﮔﺮدد. • داﻧﺸﺠﻮﻳﺎن ﻣﻲﺗﻮاﻧﻨﺪ ﺑﻪ دلﺧﻮاه در ﻣﻮرد ﻧﺤﻮهي اﻧﺠﺎم ﭘﺮوژه ﻫﻢﻓﻜﺮي داﺷﺘﻪ ﺑﺎﺷﻨﺪ و ﺣﺘﻲ اﻟﮕﻮرﻳﺘﻢﻫﺎ و ﺑﺮﻧﺎﻣﻪﻫﺎ را ﺑﺎ ﻳﻜﺪﻳﮕﺮ ﭼﻚ ﻛﻨﻨﺪ ،وﻟﻲ ﻳﻚ داﻧﺸﺠﻮ ﺑﻪ ﻫﻴﭻ وﺟﻪ ﺣﻖ اﺳﺘﻔﺎده از Source Codeدﻳﮕﺮان را ﻧﺪارد و ﺑﺎﻳﺪ ﻛﻞ ﻛﺪ ﺑﺮﻧﺎﻣﻪاي ﻛﻪ ﺑﺮاي ﭘﺮوژه ارﺳﺎل ﻣﻲﻛﻨﺪ ﺗﻮﺳﻂ ﺧﻮد وي و ﺑﺪون دﺧﺎﻟﺖ دﻳﮕﺮان و ﺑﺪون اﺳﺘﻔﺎده از ﻛﺪ ﻧﻮﺷﺘﻪ ﺷﺪه ﺗﻮﺳﻂ دﻳﮕﺮان )ﺣﺘﻲ ﻣﻮارد ﻣﻨﺘﺸﺮ ﺷﺪه روي اﻳﻨﺘﺮﻧﺖ( ﺑﺎﺷﺪ .ﻫﻤﭽﻨﻴﻦ در اﺧﺘﻴﺎر ﮔﺬاﺷﺘﻦ ﻛﺪ ﺑﺮﻧﺎﻣﻪ ﺧﻮد ﺑﺮاي دﻳﮕﺮان ﻳﺎ ﻣﺸﺎرﻛﺖ در ﻛﺪ ﺑﺮﻧﺎﻣﻪي دﻳﮕﺮان ﺑﻪ ﻫﺮ ﻧﺤﻮ ﻣﻤﻜﻦ ﻣﺠﺎز ﻧﻴﺴﺖ .ﻋﺪم رﻋﺎﻳﺖ اﻳﻦ ﻣﻮارد ﺑﻪ ﻣﻌﻨﺎي زﻳﺮﭘﺎ ﮔﺬاﺷﺘﻦ اﺧﻼق آﻛﺎدﻣﻴﻚ و اﻧﺼﺮاف از ﻗﺒﻮﻟﻲ در اﻳﻦ درس ﺧﻮاﻫﺪ ﺑﻮد. • ﺑﺮاي ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ ﺗﻨﻬﺎ ﻣﻲﺗﻮاﻧﻴﺪ از دادهﺳﺎﺧﺘﺎرﻫﺎي اوﻟﻴﻪ زﺑﺎن اﺳﺘﻔﺎده ﻛﻨﻴﺪ .ﺑﻬﺮهﮔﻴﺮي از دادهﺳﺎﺧﺘﺎرﻫﺎي ﭘﻴﺸﺮﻓﺘﻪ ﻣﺎﻧﻨﺪ ﺗﻮاﺑﻊ STLﻳﺎ ﻧﻈﺎﻳﺮ آن ﻣﺠﺎز ﻧﻴﺴﺖ. • زﻣﺎن اﻧﺠﺎم ﭘﺮوژهي ﭘﺎﻳﺎﻧﻲ ﻳﻚ ﻫﻔﺘﻪ از ﺗﺎرﻳﺦ اﻋﻼم آن ﻣﻲﺑﺎﺷﺪ. ﻣﻮﺿﻮع اول :ﻛﻨﺘﺮل ورود )(Login در ﺳﺎﻳﺖ facebookﺗﻌﺪادي ﻛﺎرﺑﺮ ﺛﺒﺖ ﻧﺎم ﻣﻲﻛﻨﻨﺪ .ورود ﻛﺎرﺑﺮان از ﻃﺮﻳﻖ وارد ﻛﺮدن ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي و ﻛﻠﻤﻪي ﻋﺒﻮر اﻧﺠﺎم ﻣﻲﮔﻴﺮد .ﺑﺎ اﺳﺘﻔﺎده از روش ﻣﻨﺎﺳﺒﻲ ﻣﻲﺧﻮاﻫﻴﻢ ﻋﻤﻞ ﻛﻨﺘﺮل ﺗﻄﺎﺑﻖ ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي و ﻛﻠﻤﻪي ﻋﺒﻮر ﻛﺎرﺑﺮان را در زﻣﺎن اﺟﺮا و ﺑﺎ ﺣﺎﻓﻈﻪي ﻛﺎرآﻣﺪي اﻧﺠﺎم دﻫﻴﻢ .در اﻳﻦ ﻣﺴﺎﻟﻪ ﺑﺮﻧﺎﻣﻪي ﺷﻤﺎ ﺑﺎﻳﺪ از دو دﺳﺘﻮر زﻳﺮ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻛﻨﺪ: Add username password ﻛﻪ ﻳﻚ ﻛﺎرﺑﺮ ﺟﺪﻳﺪ ﺑﺎ ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي usernameو ﻛﻠﻤﻪي ﻋﺒﻮر passwordاﺿﺎﻓﻪ ﻣﻲﻛﻨﺪ .ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎ دﻳﺪن اﻳﻦ • دﺳﺘﻮر در ورودي اﺳﺘﺎﻧﺪارد ،ﻳﻚ ﻋﺒﺎرت Successfulﻳﺎ Failedدر ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﻨﻮﻳﺴﺪ .ﻫﻨﮕﺎﻣﻲ ﻋﺒﺎرت Successfulﻧﻮﺷﺘﻪ ﻣﻲﺷﻮد ﻛﻪ ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي ﻗﺒﻼ Addﻧﺸﺪه ﺑﺎﺷﺪ ،در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻋﺒﺎرت Failedﻧﻮﺷﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ .در ﺻﻮرت ﻣﻮﻓﻖ ﺑﻮدن ﻋﻤﻞ ،ﺑﺎﻳﺪ ﻛﺎرﺑﺮ ﺟﺪﻳﺪي ﺑﺎ ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي و ﻛﻠﻤﻪي ﻋﺒﻮر ﺑﻪ ﻓﻬﺮﺳﺖ ﻛﺎرﺑﺮان اﻓﺰوده ﺷﻮد. Login username password ﺑﺎ ﺧﻮاﻧﺪن اﻳﻦ دﺳﺘﻮر از ورودي اﺳﺘﺎﻧﺪارد ،ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﻚ ﻋﺒﺎرت Yesﻳﺎ Noدر ﺧﺮوﺟﻲ اﺳﺘﺎﻧﺪارد ﺑﻨﻮﻳﺴﺪ. • ﻫﻨﮕﺎﻣﻲ Yesﻧﻮﺷﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ ﻛﻪ ﻓﺮدي ﺑﺎ ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي و ﻛﻠﻤﻪ ﻋﺒﻮر ﻣﻨﻄﺒﻖ ﺑﺮ دﺳﺘﻮر ﻗﺒﻼ در ﻓﻬﺮﺳﺖ ﻛﺎرﺑﺮان وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ .در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﺑﺮﻧﺎﻣﻪ ﻣﻲﺑﺎﻳﺴﺖ Noرا ﺑﻨﻮﻳﺴﺪ. ورودي در ﺧﻂ اول ورودي nداده ﺷﺪه اﺳﺖ و در nﺧﻂ ﺑﻌﺪي ﻫﺮ دﺳﺘﻮر در ﻳﻚ ﺳﻄﺮ آﻣﺪه اﺳﺖ .در ﻫﻴﭻ ﻧﺎم ﻛﺎرﺑﺮي ﻳﺎ ﻛﻠﻤﻪي ﻋﺒﻮر ﻛﺎراﻛﺘﺮي ﺑﻪ ﻏﻴﺮ از ﺣﺮوف اﻧﮕﻠﻴﺴﻲ ﻛﻮﭼﻚ ﻳﺎ ارﻗﺎم 0ﺗﺎ 9وﺟﻮد ﻧﺪارد .ﻫﻤﭽﻨﻴﻦ ﻓﺮﻣﺖ ﮔﻔﺘﻪ ﺷﺪه در ﺻﻮرت ﻣﺴﺎﻟﻪ دﻗﻴﻘﺎ در ورودي رﻋﺎﻳﺖ ﻣﻲﺷﻮد ،ﻳﻌﻨﻲ ﻣﺜﻼ ﺳﻄﺮ ﺧﺎﻟﻲ ﻳﺎ ﺳﻄﺮي ﻛﻪ در آن ﻳﻚ دﺳﺘﻮر Loginﺑﺪون ﺷﻨﺎﺳﻪ ﻛﺎرﺑﺮي ﻳﺎ ﻛﻠﻤﻪ ﻋﺒﻮر درج ﺷﺪه ﺑﺎﺷﺪ در ورودي وﺟﻮد ﻧﺨﻮاﻫﺪ داﺷﺖ. ﺧﺮوﺟﻲ در ﺧﺮوﺟﻲ ﺑﻪ ازاي ﻫﺮ دﺳﺘﻮر ورودي ،ﺑﺎﻳﺪ ﭘﺎﺳﺦ ﻣﻨﺎﺳﺐ در ﻳﻚ ﺳﻄﺮ درج ﺷﻮد. ﻣﺤﺪودﻳﺖ ﻫﺎ • ﺗﻌﺪاد دﺳﺘﻮرات ﺑﻴﺶ از 100,000ﻧﺨﻮاﻫﺪ ﺑﻮد. • ﻃﻮل ﻫﺮ ﻧﺎم ﻛﺎرﺑﺮي و ﻛﻠﻤﻪي ﻋﺒﻮر ﺑﻴﺶ از 20ﺣﺮف ﻧﺨﻮاﻫﺪ ﺑﻮد. ورودي ﻧﻤﻮﻧﻪ 10 Add gholi albaloo Add goli zardaloo Add gholi albaloo Login manuch shalil Add gholi1 gilas Login goli zardaloo Login gholi gilas Add goli ananas Login goli ananas Login gholi1 gilas ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ Successful Successful Failed No Successful Yes No Failed No Yes ﻣﻮﺿﻮع دوم :ﭘﺸﺘﻪ )(Stack در اﻳﻦ ﻣﺴﺌﻠﻪ ﺷﻤﺎ ﺑﺎﻳﺴﺘﻲ اﻋﻤﺎﻟﻲ ﻛﻪ ﺑﺮ روي ﻳﻚ ﭘﺸﺘﻪ اﻧﺠﺎم ﻣﻴﺸﻮﻧﺪ را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ .ﭘﺸﺘﻪ در اﺑﺘﺪا ﺧﺎﻟﻲ ﺑﻮده و ﻳﻚ ﻣﺘﻐﻴﺮ ﺑﺎ ﻧﺎم kدر اﺑﺘﺪاي دﺳﺘﻮرات داده ﺧﻮاﻫﺪ ﺷﺪ ﻛﻪ ﺗﺎ اﻧﺘﻬﺎي دﺳﺘﻮرات ﺗﻐﻴﻴﺮ ﻧﺨﻮاﻫﺪ ﻛﺮد .دﺳﺘﻮراﺗﻲ ﻛﻪ ﺑﺎﻳﺪ ﭘﺸﺘﻴﺒﺎﻧﻲ ﻛﻨﻴﺪ: Push x • ﻛﻪ ﻋﺪد ﺻﺤﻴﺢ xرا ﺑﻪ ﺑﺎﻻي ﭘﺸﺘﻪ اﺿﺎﻓﻪ ﻣﻲ ﻛﻨﺪ. Top • ﺑﺎ دﻳﺪن اﻳﻦ دﺳﺘﻮر ،در ﺧﺮوﺟﻲ ﺑﺎﻳﺪ ﻋﺪد ﺑﺎﻻي ﭘﺸﺘﻪ ﭼﺎپ ﺷﻮد )ﻋﻀﻮ ﺑﺎﻻ از ﭘﺸﺘﻪ ﺧﺎرج ﻧﺨﻮاﻫﺪ ﺷﺪ( Max • ﻛﻪ ﺑﺎﻳﺪ ﻣﻘﺪار ﺑﻴﺸﻴﻨﻪ ي kﻋﺪد ﺑﺎﻻي ﭘﺸﺘﻪ را در ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﻴﺪ. Flip ﺑﺎ دﻳﺪن اﻳﻦ دﺳﺘﻮر k ،ﻋﺪد ﺑﺎﻻي ﭘﺸﺘﻪ ﺑﺎﻳﺴﺘﻲ ﺗﺮﺗﻴﺒﺸﺎن ﺑﺮ ﻋﻜﺲ ﺷﻮد ،ﻳﻌﻨﻲ ﻋﻀﻮ اول ﺣﺎﻟﺖ ﺟﺪﻳﺪ ،ﻋﻀﻮ kام ﺣﺎﻟﺖ ﻗﺪﻳﻢ ﺑﻮده ،ﻋﻀﻮ دوم ﺟﺪﻳﺪ ،ﻋﻀﻮ k-1ام ﻗﺪﻳﻢ ﺑﻮده ،و ﺑﻪ ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ در ﻧﻬﺎﻳﺖ ﻋﻀﻮ kام ﺟﺪﻳﺪ ،ﻋﻀﻮ اول ﻗﺪﻳﻢ ﺧﻮاﻫﺪ ﺑﻮد. داده ﺳﺎﺧﺘﺎري ﻣﻨﺎﺳﺐ ﺑﺮاي ﭘﺸﺘﻴﺒﺎﻧﻲ از اﻳﻦ دﺳﺘﻮرات ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ. ورودي در ﺧﻂ اول ورودي kداده ﺷﺪه اﺳﺖ و در ﺧﻂ دوم Tﺗﻌﺪاد دﺳﺘﻮرات ﻣﻲآﻳﺪ و ﺑﻌﺪ از آن Tدﺳﺘﻮر ﻫﺮﻛﺪام در ﻳﻚ ﺧﻂ آﻣﺪه اﺳﺖ. ﺧﺮوﺟﻲ در ﺧﺮوﺟﻲ ﺑﻪ ازاي ﻫﺮ دﺳﺘﻮر Topو Maxﺑﺎﻳﺪ در ﻳﻚ ﺧﻂ ،ﻳﻚ ﻋﺪد ﭼﺎپ ﺷﻮد. ﻣﺤﺪودﻳﺖ ﻫﺎ • ﺗﻌﺪاد دﺳﺘﻮرات ﺑﻴﺶ از 100,000ﻧﺨﻮاﻫﺪ ﺑﻮد. • ﻣﻘﺪار kﺣﺪاﻛﺜﺮ 20,000ﺧﻮاﻫﺪ ﺑﻮد. • ورودي ﻧﻤﻮﻧﻪ 4 11 Push 5 Push 4 Max Push 1 Top Push 4 Push 6 Flip Top Push 3 Max ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ 5 1 4 4 ﻣﻮﺿﻮع ﺳﻮم :ﺷﺒﻜﻪ دوﺳﺘﻲ )(Network در facebookﺗﻌﺪادي ﻛﺎرﺑﺮ وﺟﻮد دارﻧﺪ ﻛﻪ ﺑﻴﻦ ﻫﺮ دو ﻧﻔﺮ از اﻳﻦ ﻛﺎرﺑﺮان ﻣﻤﻜﻦ اﺳﺖ راﺑﻄﻪي دوﺳﺘﻲ ﺑﺮﻗﺮار ﺷﻮد .ﺷﻤﺎ ﺑﺎﻳﺴﺘﻲ اﻃﻼﻋﺎت اﻳﻦ ﺷﺒﻜﻪ را ﺑﻪ ﻧﺤﻮي ذﺧﻴﺮه ﺳﺎزي ﻛﻨﻴﺪ ﻛﻪ در زﻣﺎن ﻣﻨﺎﺳﺐ دﻧﺒﺎﻟﻪاي از دﺳﺘﻮرات ﻣﺘﺸﻜﻞ از ﺳﻪ ﻧﻮع زﻳﺮ را اﻋﻤﺎل ﻛﻨﺪ) :ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ ﻛﺎرﺑﺮ ﻳﻚ ﻋﺪد ﻳﻜﺘﺎ ﺑﻌﻨﻮان ﺷﻨﺎﺳﻪ دارد .در ﺷﺮوع ﻛﺎر ﺳﻴﺴﺘﻢ ،ﻣﺘﻐﻴﺮي ﺑﻪ ﻧﺎم lastﺑﺎ ﻣﻘﺪار ﺻﻔﺮ ﺑﺎرﮔﺬاري ﻣﻲﺷﻮد و ﺑﺎ ورود ﻳﻚ ﻛﺎرﺑﺮ ﺟﺪﻳﺪ ،ﻣﺘﻐﻴﺮ lastﻳﻜﻲ اﺿﺎﻓﻪ ﺷﺪه ،و ﺷﻨﺎﺳﻪي آن ﻛﺎرﺑﺮ ﺑﺮاﺑﺮ ﻣﻘﺪار ﺟﺪﻳﺪ lastﻗﺮار ﻣﻲﮔﻴﺮد .ﺑﻪ ﻃﻮر ﻣﺜﺎل ﺷﻨﺎﺳﻪي اوﻟﻴﻦ ﻛﺎرﺑﺮ ﺑﺮاﺑﺮ 1اﺳﺖ( Add x ﺑﺎ دﻳﺪن اﻳﻦ دﺳﺘﻮر ،ﺷﻤﺎ ﺑﺎﻳﺴﺘﻲ xﻛﺎرﺑﺮ ﺟﺪﻳﺪ ﺑﻪ ﺳﻴﺴﺘﻢ اﺿﺎﻓﻪ ﻛﻨﻴﺪ ) ﻛﻪ اﮔﺮ ﻣﻘﺪار lastرا ﻗﺒﻞ از اﻳﻦ دﺳﺘﻮر t • ﺑﮕﻴﺮﻳﻢ ﺷﻨﺎﺳﻪﻫﺎي آنﻫﺎ ﺑﺮاﺑﺮ t+1ﺗﺎ t+xﺧﻮاﻫﺪ ﺷﺪ و ﻣﺘﻐﻴﺮ lastﺑﻪ ﺗﻨﺎﺳﺐ ﺑﻪروز ﺧﻮاﻫﺪ ﺷﺪ(. Group e v1 v2 … ve در اﺑﺘﺪاي اﻳﻦ دﺳﺘﻮر ﻳﻚ ﻋﺪد (e>=2) eﻗﺮار دارد و ﺑﻌﺪ از آن ﺷﻨﺎﺳﻪي eﻛﺎرﺑﺮ داده ﻣﻲﺷﻮد ﻛﻪ ﺷﻤﺎ ﺑﺎﻳﺴﺘﻲ ﺑﻴﻦ ﻫﺮ • دو ﻧﻔﺮ از اﻳﻦ eﻛﺎرﺑﺮ ﻳﻚ راﺑﻄﻪي دوﺳﺘﻲ ﻓﺮض ﻛﻨﻴﺪ .ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﻣﻤﻜﻦ اﺳﺖ ﺑﻌﻀﻲ از اﻳﻦ ﻛﺎرﺑﺮان ﻗﺒﻼ ﻫﻢ ﺑﺎ ﻳﻜﺪﻳﮕﺮ راﺑﻄﻪي دوﺳﺘﻲ داﺷﺘﻪ ﺑﺎﺷﻨﺪ. Isrelative u v در ﭘﺎﺳﺦ اﻳﻦ دﺳﺘﻮر ،اﮔﺮ دﻧﺒﺎﻟﻪاي از دوﺳﺘﻲ ﺑﻴﻦ دو ﻛﺎرﺑﺮ ﺑﺎ ﺷﻨﺎﺳﻪﻫﺎي uو vوﺟﻮد داﺷﺖ ،در ﺧﺮوﺟﻲ ﻋﺒﺎرت ” “yesو • در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻋﺒﺎرت ” “noرا ﭼﺎپ ﻛﻨﻴﺪ .ﻣﻨﻈﻮر از دﻧﺒﺎﻟﻪي دوﺳﺘﻲ ،دﻧﺒﺎﻟﻪاي از ﻛﺎرﺑﺮان اﺳﺖ ﻛﻪ ﻫﺮ دو ﻛﺎرﺑﺮ ﭘﺸﺖﺳﺮ ﻫﻢ ﺑﺎ ﻫﻢ دوﺳﺖ ﻫﺴﺘﻨﺪ و اول و آﺧﺮ اﻳﻦ دﻧﺒﺎﻟﻪ uو vاﺳﺖ. ورودي در ﺧﻂ اول ورودي Tﺗﻌﺪاد دﺳﺘﻮرات ﻣﻲآﻳﺪ و ﺑﻌﺪ از آن Tدﺳﺘﻮر ﻫﺮﻛﺪام در ﻳﻚ ﺧﻂ آﻣﺪه اﺳﺖ. ﺧﺮوﺟﻲ در ﺧﺮوﺟﻲ ﺑﻪ ازاي ﻫﺮ دﺳﺘﻮر Isrelativeﺑﺎﻳﺪ ﻳﻚ ﺧﻂ ﺷﺎﻣﻞ ” “yesﻳﺎ ” “noﭼﺎپ ﺷﻮد. ﻣﺤﺪودﻳﺖ ﻫﺎ • ﺗﻌﺪاد دﺳﺘﻮرات ﺑﻴﺶ از 100,000ﻧﺨﻮاﻫﺪ ﺑﻮد. • ﺗﻌﺪاد ﻛﻞ ﻛﺎرﺑﺮان ﺑﻴﺸﺘﺮ از ﻳﻚ ﻣﻴﻠﻴﻮن ﻛﺎرﺑﺮ ﻧﺨﻮاﻫﺪ ﺷﺪ. • ﻣﺠﻤﻮع اﻧﺪازهي ﮔﺮوهﻫﺎ )ﺟﻤﻊ ﭘﺎراﻣﺘﺮﻫﺎي eدر ﻫﻤﻪي دﺳﺘﻮرات ،(Groupﺑﻴﺶ از 10,000ﻧﺨﻮاﻫﺪ ﺑﻮد .ﻫﻤﭽﻨﻴﻦ در %70ﺗﺴﺖﻫﺎ ﺗﻌﺪاد رواﺑﻂ دوﺳﺘﻲ ﺣﺪاﻛﺜﺮ 10,000ﺧﻮاﻫﺪ ﺑﻮد. ورودي ﻧﻤﻮﻧﻪ 9 Add 5 Group 3 1 5 3 Group 3 1 3 4 Isrelative 4 5 Isrelative 2 4 Add 3 Group 2 3 7 Group 2 7 6 Isrelative 2 6 ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ yes no yes ﻣﻮﺿﻮع ﭼﻬﺎرم :ﺗﻮپ ﺑﺎزي )(Ball nﻛﻴﺴﻪي ﺧﺎﻟﻲ دارﻳﻢ ) (A1, A2, …,Anﻛﻪ در ﻫﺮﻛﺪام ﻣﻲﺗﻮان ﺣﺪاﻛﺜﺮ ﻳﻚ ﺗﻮپ ﻗﺮار داد .در ﻫﺮ ﻧﻮﺑﺖ »ﭘﺮﺗﺎب ﺗﻮپ« ،ﻳﻚ ﻋﺪد iﺑﻪ ﻣﺎ داده ﻣﻲﺷﻮد ﻛﻪ ﺑﺎﻳﺪ در ﺻﻮرﺗﻲ ﻛﻪ Aiﺧﺎﻟﻲ اﺳﺖ ،در آن ﻳﻚ ﺗﻮپ ﭘﺮﺗﺎب ﻛﻨﻴﻢ )ﭘﺮﺗﺎب ﻣﻮﻓﻘﻴﺖ آﻣﻴﺰ( .و اﮔﺮ Aiﺧﺎﻟﻲ ﻧﻴﺴﺖ )ﭘﺮﺗﺎب ﻧﺎﻣﻮﻓﻖ( ﺑﺎﻳﺪ »ﺷﻤﺎرهي ﻛﻴﺴﻪﻫﺎي اول و آﺧﺮ دﻧﺒﺎﻟﻪي ﻣﺎﻛﺴﻴﻤﺎل ﻛﻴﺴﻪﻫﺎي ﻣﺘﻮاﻟﻲ ﭘﺮ ﺷﺎﻣﻞ «Aiرا اﻋﻼم ﻛﻨﻴﻢ. ﺑﻪ ﻋﻨﻮان ﻧﻤﻮﻧﻪ ﺣﺎﻟﺖ زﻳﺮ را در ﻣﻮرد ﻛﻴﺴﻪﻫﺎ )ﺑﻌﺪ از ﺗﻌﺪادي ﻋﻤﻠﻴﺎت( در ﻧﻈﺮ ﻣﻲ ﮔﻴﺮﻳﻢ )در اﻳﻦ ﺷﻜﻞ ،ﺧﺎﻧﻪﻫﺎي ﭘﺮ ﻧﻤﺎﻳﺶدﻫﻨﺪهي ﻛﻴﺴﻪﻫﺎي ﭘﺮ اﺳﺖ(: 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 اﮔﺮ ﻋﺪد ورودي 10ﺑﺎﺷﺪ ،ﻛﻴﺴﻪي -10ام را ﭘﺮ ﻣﻲ ﻛﻨﻴﻢ ،و ﺑﻪ ﺣﺎﻟﺖ زﻳﺮ ﻣﻲرﺳﻴﻢ: 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 ﺣﺎﻻ اﮔﺮ ﻋﺪد ورودي 19ﺑﺎﺷﺪ ،ﺑﺎﻳﺪ »دﻧﺒﺎﻟﻪي ﻣﺎﻛﺴﻴﻤﺎل ﻛﻴﺴﻪﻫﺎي ﻣﺘﻮاﻟﻲ ﭘﺮ ﺷﺎﻣﻞ «A19را ﺷﻨﺎﺳﺎﻳﻲ ﻛﻨﻴﻢ .در ﺣﺎﻟﺘﻲ ﻛﻪ در ﺷﻜﻞ ﻓﻮق ﻧﻤﺎﻳﺶ داده ﺷﺪه اﺳﺖ اﻳﻦ دﻧﺒﺎﻟﻪ ﻣﺎﻛﺴﻴﻤﺎل از ﻛﻴﺴﻪﻫﺎ ﻋﺒﺎرﺗﺴﺖ از .A16,A17,A18,A19,A20,A21,A22ﺑﻨﺎﺑﺮاﻳﻦ ﺷﻤﺎرهي ﻛﻴﺴﻪﻫﺎي اول و آﺧﺮ آن ﻳﻌﻨﻲ 16و 22ﺑﺎﻳﺪ ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﭼﺎپ ﺷﻮد و وﺿﻌﻴﺖ ﺗﻮﭘﻬﺎي درون ﻛﻴﺴﻪﻫﺎ دﺳﺖ ﻧﺨﻮرده ﺑﺎﻗﻲ ﻣﻲﻣﺎﻧﺪ. ﺑﺮﻧﺎﻣﻪاي ﺑﺮاي اﻳﻦ ﻛﺎر ﺑﻨﻮﻳﺴﻴﺪ .دﻗﺖ ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ ﻋﻤﻞ ﻳﺎ ﺻﺮﻓﺎ ﺑﺎ ﻗﺮار دادن ﺗﻮپ در ﻳﻚ ﻛﻴﺴﻪ ﭘﺎﻳﺎن ﻣﻲﻳﺎﺑﺪ ،ﻳﺎ ﺑﺎﻳﺪ در ﭘﺎﺳﺦ ﺑﻪ آن دو ﻋﺪد ﺑﻪ ﻋﻨﻮان »ﺷﻤﺎرهي ﻛﻴﺴﻪﻫﺎي اول و آﺧﺮ دﻧﺒﺎﻟﻪي ﻣﺎﻛﺴﻴﻤﺎل ﻛﻴﺴﻪﻫﺎ ﭘﺮ ﻣﺘﻮاﻟﻲ« اﻋﻼم ﺷﻮد. ورودي در ﺳﻄﺮ اول Nﺗﻌﺪاد ﻛﻴﺴﻪﻫﺎ و Tﺗﻌﺪاد اﻋﻤﺎﻟﻲ ﻛﻪ در اداﻣﻪ روي ﻛﻴﺴﻪﻫﺎ اﻋﻤﺎل ﺧﻮاﻫﺪ ﺷﺪ داده ﺧﻮاﻫﺪ ﺷﺪ .و ﺳﭙﺲ در Tﺳﻄﺮ آﻳﻨﺪه ،در ﻫﺮ ﻛﺪام ﻳﻚ ﻋﺪد ﺑﻴﻦ 1ﺗﺎ Nداده ﻣﻲﺷﻮد ،ﻛﻪ ﺷﻤﺎرهي ﻛﻴﺴﻪاي اﺳﺖ ﻛﻪ »ﭘﺮﺗﺎب ﺗﻮپ« ﺑﺎﻳﺪ روي آن اﻧﺠﺎم ﺷﻮد .ﺑﺮاي ﺳﺎدﮔﻲ ﻣﻲﺗﻮاﻧﻴﺪ ﻓﺮض ﻛﻨﻴﺪ در ﻧﻤﻮﻧﻪﻫﺎي ورودي ﺗﻮزﻳﻊ اﺣﺘﻤﺎل ﻣﻘﺎدﻳﺮ ﻣﺨﺘﻠﻒ ﺑﺮاي ﺷﻤﺎره ﻛﻴﺴﻪﻫﺎ ﻳﻜﻨﻮاﺧﺖ اﺳﺖ. ﺧﺮوﺟﻲ ﺑﺮاي ﺳﻄﺮ از ﻫﺮ ﻧﻤﻮﻧﻪ ﺑﺎﻳﺪ ﻳﻚ ﺳﻄﺮ ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﭼﺎپ ﻛﻨﻴﺪ ﻛﻪ در ﺻﻮرت ﻣﻮﻓﻘﻴﺖ آﻣﻴﺰ ﺑﻮدن »ﭘﺮﺗﺎب ﺗﻮپ« ،ﻋﺒﺎرت Yesو در ﻏﻴﺮ اﻳﻦ ﺻﻮرت دو ﻋﺪد ﻣﻮرد ﻧﻈﺮ ﭼﺎپ ﺷﻮﻧﺪ . ﻣﺤﺪودﻳﺖ ﻫﺎ ﻓﺮض ﻛﻨﻴﺪ Nﺣﺪاﻛﺜﺮ 1000,000اﺳﺖ .ﻫﻤﭽﻨﻴﻦ ﻣﻘﺪار Tاز 100,000ﺑﻴﺸﺘﺮ ﻧﺨﻮاﻫﺪ ﺑﻮد. ورودي ﻧﻤﻮﻧﻪ 7 7 5 7 5 4 2 3 4 ﺧﺮوﺟﻲ ﻧﻤﻮﻧﻪ Yes Yes 5 5 Yes Yes Yes 2 5 »ﻫﻤﭽﻮن ﺳﭙﻴﺪار ،ﺳﺒﺰ و ﺳﺮﻓﺮاز ﺑﺎﺷﻴﺪ«
© Copyright 2025 Paperzz