DSA_CA1(v2).pdf

‫بسمه تعالی‬
‫ساختمان داده و الگوریتم‬
‫نیمسال دوم ‪۳۹-۳۹‬‬
‫دکتر بیگی‬
‫دانشکده مهندسی کامپیوتر‬
‫مهلت ارسال‪ ۵۲ :‬اسفند‬
‫تمرین کامپیوتری اول‬
‫نکات مهم‬
‫لطفاً به نکات زیر توجه فرمایید‪:‬‬
‫‪‬‬
‫مهلت انجام این تمرین تا ‪ ۵۲‬اسفند ‪ ۳۹‬است‪.‬‬
‫‪‬‬
‫عالوه بر برنامههایی که نوشتهاید شما باید در یک سند متنی توضیحی برای راه حل خود برای هر مسئله ارائه کنید و در آن ثابت‬
‫کنید که راه حل شما به گونهای عمل میکند که خروجی مورد نیاز مسئله حاصل میشود‪ .‬این سند متنی را در مهلت حل سوال به‬
‫آدرس ‪ [email protected]‬بفرستید‪ .‬عنوان نامه شما باید به صورت ‪ CA1_LastName_StudentNumber‬باشد‪.‬‬
‫‪‬‬
‫شما باید برنامه های خود را که به زبان ‪ C++‬نوشته شده است را در سامانه قاضی برنامه درس ساختمان داده و الگوریتم شریف که‬
‫در آدرس زیر قرار دارد وارد کنید و برنامه شما باید بتواند تمام آزمونهای تعیین شده را بگذراند‪ .‬در غیر این صورت نمره کامل را‬
‫دریافت نخواهید کرد‪.‬‬
‫آدرس سامانه قاضی برنامه‪:‬‬
‫‪http://judge.ce.sharif.ir/93-94-2/ce254-3/‬‬
‫‪‬‬
‫در مجموع برای تمام تمرینهای عملی درس ‪ ۷‬روز زمان تاخیر وجود دارد که میتوانید در تمرینها از این فرصت اضافی نیز استفاده‬
‫کنید و در صورت تاخیر بیشتر با تناسب به میزان آن از کل تمرینات به میزان خاصی نمره کم خواهد شد‪ (.‬مثال به ازای هر روز ‪٪۲‬‬
‫از کل نمره بخش تمرینات عملی کم میشود)‬
‫‪‬‬
‫در صورت وجود ابهام در سواالت آن را با آقای حسن نصر در میان بگذارید‪.‬‬
‫مسئله ‪ :۱‬سازمان مافیا‬
‫محدودیت زمانی‪ ۵۲۲ :‬میلی ثانیه‬
‫به دلیل عدم مدیریت مناسب‪ ،‬ساختار تشکیالتی مافیای شهر نارهت به هم ریخته است و افرادی که صالحیت الزم برای تصدی یک پست را‬
‫ندارند به آن پست گماشته شدهاند و این موضوع آینده این سازمان را تحدید میکند و همچنین باعث نارضایتی اعضا شده است‪ .‬به همین دلیل‬
‫تصمیم گرفتند که تغییراتی را در ساخت ار اعضا ایجاد کنند‪ .‬ساختار این سازمان شبیه به یک درخت دودویی تقریبا کامل است که هر عضو (به‬
‫جز اعضای در پایینترین مقام ) یک عضو مشاور چپ و یک عضو مشاور راست دارد و از طرفی خود مشاور مقام مافوق است‪ .‬و تعداد مشاورین‬
‫مشاور چپ یک فرد کمتر از مشاورین مشاور سمت راست یک فرد نیست‪( .‬مانند یک پشته)‬
‫هر فرد دارای امتیازی است که با توجه به سوابق و فعالیت هایش به دست آورده است و یک فرد در صورتی از مقام خود ناراضی خواهد بود که‬
‫امتیاز رئیسش از امتیاز او کمتر باشد‪.‬‬
‫‪1‬‬
‫بسمه تعالی‬
‫ساختمان داده و الگوریتم‬
‫نیمسال دوم ‪۳۹-۳۹‬‬
‫دکتر بیگی‬
‫دانشکده مهندسی کامپیوتر‬
‫مهلت ارسال‪ ۵۲ :‬اسفند‬
‫تمرین کامپیوتری اول‬
‫حال از شما خواسته شده است که ساختار این سازمان را به گونه ای تغییر دهید که امتیاز هر شخص از امتیاز مشاورانش کمتر نباشد از آنجا که‬
‫می خواهیم این تغییر ساختار کمترین توجه را در اذهان عمومی ایجاد کند و همچنین افراد با همکاران خود آشنا باشند در هر روز میتوانیم جای‬
‫یک فرد را با رائیسش عوض کنیم‪ .‬از طرفی می خواهیم حداکثر در ‪ n‬روز کل این جابجاییها تمام شود که ‪ n‬برابر تعداد افراد سازمان است‪ .‬شما‬
‫باید برنامهای بنویسید که مشخص کند در هر روز چه جابجایی انجام شود‪.‬‬
‫ورودی‪:‬‬
‫در خط اول ‪ )1 ≤ 𝑛 ≤ 1000000( n‬تعداد اعضای سازمان آمده است‪ .‬در خط بعدی ‪ n‬عدد طبیعی آمده است که عدد ‪ i‬ام امتیاز فرد ‪ i‬ام‬
‫است و از طرفی در صورتی که درخت افراد را در نظر بگیریم فرد ‪ i‬ام در مکان ‪ i‬ام ترتیب سطحی‪ 1‬این درخت قرار دارد‪( .‬شماره ریشه صفر است‬
‫و هر سطح از چپ به راست پیمایش میشود)‬
‫خروجی‪:‬‬
‫در خروجی در سطر ‪i‬ام جابجایی انجام شده در روز ‪i‬ام نوشته می شود‪ .‬برای هر جابجایی مکان در ترتیب سطحی دو فردی که با یکدیگر جابجا‬
‫میشوند با یک فاصله نوشته شود‪.‬‬
‫نمونه ورودی‪:‬‬
‫‪5‬‬
‫‪12345‬‬
‫نمونه خروجی‬
‫‪14‬‬
‫‪01‬‬
‫‪13‬‬
‫‪Level order‬‬
‫‪2‬‬
‫‪1‬‬
‫بسمه تعالی‬
‫ساختمان داده و الگوریتم‬
‫نیمسال دوم ‪۳۹-۳۹‬‬
‫دکتر بیگی‬
‫دانشکده مهندسی کامپیوتر‬
‫مهلت ارسال‪ ۵۲ :‬اسفند‬
‫تمرین کامپیوتری اول‬
‫مسئله ‪ :۵‬برجهای مافیا‬
‫محدودیت زمانی‪ ۵۲۲ :‬میلی ثانیه‬
‫پس از این که مافیای شهر نارهت توانست ساختار خود را بازسازی کند وقت آن رسیده که اموالی که به ناحق به بعضی از اعضا رسیده بود باز‬
‫پس گرفته شود و دوباره بین اعضا تقسیم شود‪ .‬از چندین سال پیش مافیا برای تسلط کامل بر بازار شهر آپارتمانی در باالترین طبقه تمام‬
‫ساختمانهای بازار اصلی شهر که همگی در یک خیابان قرار دارند را خریداری کرد و هر یک از اعضا را در یکی از آنها اسکان داده بود‪ .‬بازار اصلی‬
‫در راستای شمال به جنوب قرار دارد و ارزش هر برج ‪ i‬برابر تعداد ساختمانها ‪ j‬ای است که در سمت جنوب آن وجود دارند ‪ ،‬ارتفاع کمتر از ‪i‬‬
‫دارند و ارتفاع تمام ساختمانهای بین ‪ i‬و ‪ j‬کمتر از ارتفاع ‪ j‬است‪.‬‬
‫برای مثال در شکل زیر ارزش هر برج در باالی آن نوشته شده است‪.‬‬
‫‪0‬‬
‫‪2‬‬
‫‪1‬‬
‫‪0‬‬
‫‪1‬‬
‫‪0‬‬
‫شمال‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫جنوب‬
‫حال وظیفه شما محاسبه ارزش هر ساختمان است تا مقدمات تقسیم آنها بین اعضا فراهم شود‪.‬‬
‫ورودی‪:‬‬
‫در خط اول ‪ )1 ≤ 𝑛 ≤ 500000( n‬تعداد ساختمانهای موجود در بازار اصلی شهر میآید و سپس در خط بعد ‪ n‬عدد میآید که به ترتیب‬
‫‪۹۲‬‬
‫ارتفاع جنوبیترین ساختمان تا شمالیترین ساختمان این بازار را نشان میدهد‪ .‬ارتفاع هر ساختمان یک عدد طبیعی بین ‪ ۱‬تا ‪ ۵‬است‪.‬‬
‫خروجی‪:‬‬
‫در خروجی باید به ازای هر ساختمان ارزش آن را چاپ کنید به عبارت دیگر در خروجی در یک سطر ‪ n‬عدد بنویسید که به ترتیب ارزش‬
‫جنوبیترین ساختمان تا شمالیترین ساختمان بازار است‪.‬‬
‫‪3‬‬
‫بسمه تعالی‬
‫ساختمان داده و الگوریتم‬
‫نیمسال دوم ‪۳۹-۳۹‬‬
‫دکتر بیگی‬
‫دانشکده مهندسی کامپیوتر‬
‫مهلت ارسال‪ ۵۲ :‬اسفند‬
‫تمرین کامپیوتری اول‬
‫نمونه ورودی‪:‬‬
‫‪9‬‬
‫‪1 2 3 4 9 6 7 8 10‬‬
‫نمونه خروجی‪:‬‬
‫‪011110112‬‬
‫‪4‬‬