extra.pdf

‫به نام خدا‬
‫درس‬
‫ساختمان داد ‌هها و الگوریتم ها‬
‫)سال تحصیلی ‪ ، ۹۰-۸۹‬ترم ‪(۲‬‬
‫استاد‬
‫دکتر محمد علی آبام‬
‫دستیاران استاد‬
‫احسان امام جمعه زاده‬
‫اشکان نوروزی‬
‫پروژه‬
‫چهار‬
‫خها‬
‫مهلت ارسال پاس ‌‬
‫پایان روز ‪ ۱۰‬تیر‬
‫سلم‬
‫لطفْا توضیحات زیر را با دقت بخوانید‪:‬‬
‫✗‬
‫یتوانید به زبان سی پلس پلس و یا جاوا بنویسید‪.‬‬
‫برنامه های خود را م ‌‬
‫✗‬
‫یتوانید نمره بگیرید‪) .‬اگر برای هر دو ی این مسأله ها ‪ ،‬برنامه‬
‫هر کدام از این دو مسأله‪) ،‬تا سقف( یک نمره دارند‪ .‬ولی تنها از یکی از این دو مسأله م ‌‬
‫ارسال کنید‪ ،‬بین نمر‌ههایی که از این دو مسأله گرفته اید‪ ،‬ماکسیمم گرفته می شود‪(.‬‬
‫✗‬
‫مهم‪ :‬شیوه ی ارسال پروژه‪:‬‬
‫ برنامه ی مربوط به پروژه ی چهارم همراه با برنام‌ههای مربوط به این سوالت‪ ،‬همه را در پوشه ای به نام ‪ stdID_PR4‬قرار دهید‪ .‬سپس آن پوشه را‬‫فشرده کنید و در نهایت فایل فشرده ای با نام ‪ stdID_PR4.zip‬به آدرس ‪ [email protected]‬ارسال نمایید‪.‬‬
‫عنوان ایمیل هم باید ‪ PR4‬باشد‪.‬‬
‫ علوه بر ارسال پروژه ها به آدرس گفته شده‪ ،‬باید برنام‌ههای خود را به آربیتر ) ‪ ( http://acm.sharif.edu/arbiter‬نیز ارسال نمایید‪ .‬آربیتر به‬‫صورت آنلین برنام‌ههای شما را تست کرده و نتیجه را به شما گزارش می کند‪) .‬البته نتیج‌های که آربیتر به شما گزارش می کند‪ ،‬نتیجه ی نهایی پروژه تان‬
‫نیست!(‬
‫تذکر‪ :‬در آربیتر‪ ،‬نام کاربری شما باید به فرم ‪ ds88888888‬باشد که در آن به جای ‪ ، 88888888‬شماره ی دانشجوییتان قرار می گیرد‪.‬‬
‫ارسال برنامه هم به آدرس جیمیل درس و هم ارسال به آربیتر‪ ،‬هر دو ضروری است‪ .‬ضمن ْا دقت کنید که برای هر مسئله‪،‬‬
‫آربیتر آخرین ارسال شما را ملک قرار می دهد‪.‬‬
‫✗‬
‫مهلت ارسال پروژه ی چهام و پروژه ی اضافه‪ ،‬تا جمعه‪ ۱۰ ،‬تیر تمدید شده است‪.‬‬
‫✗‬
‫اگر درباره ی پروژه ها سؤالی داشتید‪ ،‬به ‪ [email protected]‬ایمیل بزنید‪.‬‬
‫‪Game.java‬‬
‫توضیح ‪ :‬این مسئله‪ ،‬پیش تر در فایل پروژه ی چهارم هم گفته شده بود‪.‬‬
‫‪,‬‬
‫‪Game.cpp‬‬
‫‪ n‬کارت به ترتیب روی میز چیده شد‌هاند و در ابتدا روی هر یک از کارت ها‪ ،‬یک عدد صحیح نا منفی نوشته شده است‪.‬‬
‫یشود که در هر مرحله از بازی‪:‬‬
‫یک بازی دو نفره به این صورت انجام م ‌‬
‫ینویسد )این عدد ممکن است‬
‫یکند و عدد صحیح دلخواهی روی آن م ‌‬
‫یکند‪ ،‬عدد روی کارت را پاک م ‌‬
‫ابتدا نفر اول‪ ،‬ابتدا یکی از کارت ها را به دلخواه انتخاب م ‌‬
‫منفی باشد!(‬
‫سپس یک عدد طبیعی ‪ i‬اعلم می کند‪.‬‬
‫یکند باید ناصفر‬
‫اکنون نوبت بازی نفر دوم است‪ .‬نفر دوم باید از بین ‪ i‬کارت اول‪ ،‬تعداد ناصفری کارت مجاور انتخاب کند‪) .‬تعداد کارت هایی که انتخاب م ‌‬
‫باشد‪(.‬‬
‫امتیازی که نفر دوم از این مرحله می گیرد‪ ،‬برابر است با مجموع اعداد نوشته شده بر روی این کارت ها‪.‬‬
‫این کار ‪ m‬بار تکرار می شود‪ .‬در پایان بازی‪ ،‬امتیاز نفر دوم برابر است با مجموع امتیازی که در ‪ m‬مرحله گرفته است‪.‬‬
‫به نفر دوم کمک کنید تا بیش ترین امتیاز ممکن را بگیرد‪.‬‬
‫ورودی‪:‬‬
‫در نخستین خط ورودی‪ ،‬عدد ‪) n‬تعداد کارت ها( آمده است و سپس در خط بعدی ‪ n‬عدد صحیح نامنفی که بیان گر اعداد اولیه ی روی کارت ها هستند‪.‬‬
‫سپس در خط بعدی عدد ‪) m‬تعداد مراحل بازی( آمده است‪ .‬در ‪ m‬خط بعدی‪ ،‬در هر خط‪ ،‬سه عدد ‪ p‬و ‪ q‬و ‪ i‬آمده اند‪ p .‬و ‪ q‬بیان گر این هستندکه‬
‫نفر اول‪ ،‬عدد ‪ p‬امین کارت را به ‪ q‬تبدیل کرده‪ .‬عدد ‪ i‬هم که در متن سؤال توضیح داده شده است‪.‬‬
‫یتواند صفر باشد‪.‬‬
‫تعداد کارت هایی که نفر دوم در یک مرحله انتخاب می کند‪ ،‬نم ‌‬
‫خروجی‪:‬‬
‫یتواند در طول بازی به دست آورد‪ ،‬بنویسید‪.‬‬
‫در تنها خط خروجی‪ ،‬حداکثر امتیازی را که نفر دوم م ‌‬
‫محدودیت ها‪:‬‬
‫‪ 0  n ≤ 2∗105‬و‬
‫‪5‬‬
‫‪0 ≤ m ≤10‬‬
‫اعداد روی کارت ها نیز همواره در بازه ی‬
‫)در ‪ ۳۰‬درصد تست ها ‪:‬‬
‫‪ 0  n ≤ 10‬و‬
‫‪4‬‬
‫‪( 0 ≤ m ≤10‬‬
‫‪4‬‬
‫] ‪ [ −10 6 , 106‬قرار دارند‪.‬‬
‫محدودیت حافظه هر تست ‪ ۶۴ :‬مگابایت‬
‫محدودیت زمانی هر تست ‪ ۴ :‬ثانیه برای سی پلس پلس ‪ ۶ ،‬ثانیه برای جاوا‬
‫‪sample input :‬‬
‫‪5‬‬
‫‪10 20 20 100 30‬‬
‫‪2‬‬
‫‪2 -1000 3‬‬
‫‪4 -10 5‬‬
‫‪sample output :‬‬
‫‪60‬‬
‫یکند و ‪ ۲۰‬امتیاز می گیرد‪ .‬سپس در مرحله ی بعدی‪ ،‬کارت های سوم و چهارم و پنجم را‬
‫توضیح خروجی نمونه ‪ :‬بازیکن دوم‪ ،‬در مرحله ی اول بازی‪ ،‬سومین کارت را انتخاب م ‌‬
‫یکند و ‪ ۴۰‬امتیاز می گیرد‪( 20  −10  30 = 40 ) .‬‬
‫انتخاب م ‌‬
‫‪,‬‬
‫‪SecondGame.java‬‬
‫‪SecondGame.cpp‬‬
‫همان دو بازیکن‪ ،‬این بار یک بازی دیگر ترتیب داد‌هاند‪:‬‬
‫یتوانند‬
‫نها یک عدد صحیح می نویسد‪) .‬اعداد روی کارت ها م ‌‬
‫یشوند و نفر اول روی هر یک از آ ‌‬
‫در این بازی جدید نیز در ابتدا ‪ n‬کارت روی یک میز چیده م ‌‬
‫مثبت‪ ،‬منفی و یا صفر باشند‪ (.‬در این بازی )بر خلف بازی قبلی( ترتیب کارت ها اهمیتی ندارد‪.‬‬
‫یتواند تغییر دهد؛ بلکه در هر مرحله‪ ،‬یک کارت جدید به مجموعه ی کارت های قبلی می افزاید و روی آن عددی دلخواه‬
‫این بار‪ ،‬نفر اول‪ ،‬اعداد روی کارت ها را نم ‌‬
‫می نویسد‪.‬‬
‫یشود که حداقل ‪i‬‬
‫سپس عدد طبیعی ‪ i‬را به نفر دوم می دهد‪ .‬نفر دوم باید دقیقْا ‪ i‬کارت انتخاب کند‪) .‬فرض کنید در هر مرحله‪ ،‬عدد ‪ i‬به گون‌های انتخاب م ‌‬
‫کارت روی میز موجود باشد‪.‬‬
‫امتیازی که نفر دوم از این مرحله می گیرد‪ ،‬جمع اعداد روی ‪ i‬کارت انتخاب شده است‪.‬‬
‫این کار ‪ m‬بار تکرار می شود‪ .‬در پایان بازی‪ ،‬امتیاز نفر دوم برابر است با مجموع امتیازی که در ‪ m‬مرحله گرفته است‪.‬‬
‫به نفر دوم کمک کنید تا بیش ترین امتیاز ممکن را بگیرد‪.‬‬
‫ورودی‪:‬‬
‫در نخستین خط ورودی‪ ،‬عدد ‪) n‬تعداد کارت ها( آمده است و سپس در خط بعدی ‪ n‬عدد صحیح که بیان گر اعداد اولیه ی روی کارت ها هستند‪.‬‬
‫سپس در خط بعدی عدد ‪) m‬تعداد مراحل بازی( آمده است‪.‬‬
‫در ‪ m‬خط بعدی‪ ،‬در هر خط‪ ،‬دو عدد ‪ p‬و ‪ i‬آمده اند‪.‬‬
‫‪ p‬بیان گر این است که نفر اول‪ ،‬کارتی را با عدد ‪ p‬به مجموعه ی کارت ها اضافه کرده است‪ .‬عدد ‪ i‬هم که در متن سؤال توضیح داده شده است‪.‬‬
‫خروجی‪:‬‬
‫یتواند در طول بازی به دست آورد‪ ،‬بنویسید‪.‬‬
‫در تنها خط خروجی‪ ،‬حداکثر امتیازی را که نفر دوم م ‌‬
‫محدودیت ها‪:‬‬
‫‪ 0  n ≤ 2∗105‬و‬
‫‪5‬‬
‫‪0 ≤ m ≤10‬‬
‫اعداد روی کارت ها نیز همواره در بازه ی‬
‫)در ‪ ۲۰‬درصد تست ها ‪:‬‬
‫‪ 0  n ≤ 10‬و‬
‫‪4‬‬
‫‪( 0 ≤ m ≤10‬‬
‫‪4‬‬
‫] ‪ [ −10 6 , 106‬قرار دارند‪.‬‬
‫محدودیت حافظه هر تست ‪ ۶۴ :‬مگابایت‬
‫محدودیت زمانی هر تست ‪ ۴ :‬ثانیه برای سی پلس پلس ‪ ۶ ،‬ثانیه برای جاوا‬
‫‪sample input :‬‬
‫‪5‬‬
‫‪-10 -10 -100 100 -50‬‬
‫‪2‬‬
‫‪1000 4‬‬
‫‪-1 3‬‬
‫‪sample output :‬‬
‫‪2179‬‬
‫یگیرد و در مرحله ی بعد‪ ۱۰۹۹ ،‬امتیاز‬
‫توضیح خروجی نمونه ‪ :‬بازیکن دوم‪ ،‬در مرحله ی اول ‪ ۱۰۸۰‬امتیاز م ‌‬