PR2_new.pdf

‫به نام خدا‬
‫درس‬
‫ساختمان داد ‌هها و الگوریتم ها‬
‫)سال تحصیلی ‪ ، ۹۰-۸۹‬ترم ‪(۲‬‬
‫استاد‬
‫دکتر محمد علی آبام‬
‫دستیاران استاد‬
‫اشکان نوروزی‬
‫احسان امام جمعه زاده‬
‫پروژه‬
‫دو‬
‫خها‬
‫مهلت ارسال پاس ‌‬
‫پایان روز ‪ ۲۳‬فروردین‬
‫سلم‪ .‬نوروزتون مبارک‪.‬‬
‫توضیحات‪:‬‬
‫✗‬
‫یتوانید به زبان سی پلس پلس و یا جاوا بنویسید‪.‬‬
‫برنامه های خود را م ‌‬
‫✗‬
‫نگونه که در متن سؤال گفته شده‪ ،‬به برنامه ی شما داده می شود‪ .‬خروجی شما نیز باید دقیق ْا به همان فرمتی باشد که در‬
‫ورودی هر برنامه‪ ،‬دقیقْا هما ‌‬
‫متن سؤال گفته شده است‪.‬‬
‫✗‬
‫مهم ‪ :‬شیوه ی ارسال پروژه‪:‬‬
‫ برنام‌ههای خود را )دقیقْا با همان نامی که در ابتدای متن سؤال گفته شده( ذخیره کنید و همه را در پوشه ای به نام ‪ StdID_PR2‬قرار دهید‪) .‬که‬‫در آن ‪ ، StdID‬شماره ی دانشجوییتان است!( سپس این پوشه را فشرده کنید‪ .‬در نهایت‪ ،‬فایلی با نام ‪ StdID_PR2.zip‬را به آدرس‬
‫‪ ds.40.sharif@gmail.com‬ارسال نمایید‪ .‬دقت کنید که عنوان ایمیلتان باید ‪ PR2‬باشد‪.‬‬
‫ علوه بر ارسال پروژه ها به آدرس گفته شده‪ ،‬باید برنام‌ههای خود را به آربیتر ) ‪ ( http://acm.sharif.edu/arbiter‬نیز ارسال نمایید‪ .‬آربیتر به‬‫صورت آنلین برنام‌ههای شما را تست کرده و نتیجه را به شما گزارش می کند‪) .‬البته نتیج‌های که آربیتر به شما گزارش می کند‪ ،‬نتیجه ی نهایی پروژه تان‬
‫نیست!(‬
‫تذکر‪ :‬در آربیتر‪ ،‬نام کاربری شما باید به فرم ‪ ds88888888‬باشد که در آن به جای ‪ ، ۸۸۸۸۸۸۸۸‬شماره ی دانشجویی قرار می گیرد‪ .‬سایر‬
‫توضیحات مربوط به آربیتر‪ ،‬در سایت درس ) ‪ ( http://ce.sharif.edu/courses/89-90/2/ce254-1‬گفته شده است‪.‬‬
‫✗‬
‫اگر درباره ی پروژه سؤالی داشتید‪ ،‬به ‪ ds.40.sharif@gmail.com‬ایمیل بزنید‪.‬‬
‫‪FindMax.java‬‬
‫‪FindMax.cpp ,‬‬
‫یخواهد ‪ k‬قله ی کنار هم را برای کوه نوردی انتخاب کند‪.‬‬
‫در یک رشته کوه‪ n ،‬قله با ارتفاع های مختلف‪ ،‬در یک ردیف در کنار هم قرار گرفته اند‪ .‬کو‌هنوردی م ‌‬
‫) ‪ ( 0k ≤n‬به همین خاطر باید بداند در هر ‪ k‬قله ی متوالی ‪ ،‬ارتفاع بلندترین قله‪ ،‬چه قدر است؟! برنام‌های بنویسید که اعداد مورد نیاز کوه نورد را بیاید‪.‬‬
‫ورودی‪:‬‬
‫در نخستین خط ورودی‪ ،‬به ترتیب اعداد ‪ n‬و ‪) k‬با یک فاصله( آمده اند‪.‬‬
‫سپس در خط بعدی‪ ،‬ارتفاع قل‌هها به ترتیب داده شده اند‪) .‬ارتفاع قل‌هها‪ ،‬اعداد صحیح نامنفی و ک‌متر از ‪109‬‬
‫هستند‪(.‬‬
‫‪Sample Input:‬‬
‫‪73‬‬
‫‪1 10 8 20 4 2 1‬‬
‫خروجی‪:‬‬
‫برنامه ی شما باید اعدادی را که کوه نورد نیاز دارد‪ ،‬به ترتیب چاپ نماید‪) .‬به این صورت که در نخستین خط‪ ،‬ارتفاع بیشینه ی قل‌ههای اول تا ‪ k‬ام چاپ شود‪.‬‬
‫سپس در خط بعدی‪ ،‬ارتفاع بیشینه ی قل‌ههای دوم تا ‪ k+1‬ام و به همین ترتیب …(‬
‫بدیهی است که خروجی برنامه ی شما‪ ،‬باید دقیقْا ‪ n – k + 1‬خط داشته باشد‪.‬‬
‫‪Sample Output:‬‬
‫‪10‬‬
‫‪20‬‬
‫‪20‬‬
‫‪20‬‬
‫‪4‬‬
‫توضیح ورودی و خروجی نمونه‪ :‬در ورودی نمونه‪ n = 7 ،‬و ‪k = ۳‬‬
‫•‬
‫در بین سه عدد اول‪ ،‬یعنی اعداد ‪ ۱‬و ‪ ۱۰‬و ‪ ، ۸‬عدد ‪ ۱۰‬بیش ترین مقدار را دارد‪ .‬پس در خط اول خروجی‪ ،‬عدد ‪ ۱۰‬می آید‪.‬‬
‫•‬
‫در بین سه عدد بعدی ) ‪ ۱۰‬و ‪ ۸‬و ‪ ( ۲۰‬عدد ‪ ۲۰‬بیش ترین مقدار را دارد‪.‬‬
‫•‬
‫در سه عدد بعدی‪ ) ،‬یعنی اعداد ‪ ۸‬و ‪ ۲۰‬و ‪ ( ۴‬نیز باز عدد ‪ ۲۰‬بیش ترین مقدار را دارد‪.‬‬
‫•‬
‫در سه عدد بعدی ) ‪ ۲۰‬و ‪ ۴‬و ‪ ( ۲‬باز هم عدد ‪ ۲۰‬بیشینه است‪.‬‬
‫•‬
‫در نهایت‪ ،‬در بین سه عدد آخر‪ ،‬یعنی ‪ ۴‬و ‪ ۲‬و ‪ ، ۱‬عدد ‪ ۴‬بیشینه است‪.‬‬
‫محدودیت ها‪:‬‬
‫‪ 0n≤500000‬و ‪ ، 0k ≤n‬سایر اعداد ورودی )ارتفاع قله ها( اعداد صحیح نامنفی و کوچ ‌‬
‫کتر از ‪109‬‬
‫محدودیت زمانی هر تست‪:‬‬
‫‪ ۴‬ثانیه برای برنام‌ههای به زبان سی پلس پلس‬
‫محدودیت حافظه برای هر تست‪:‬‬
‫‪ ۶۴‬مگابایت‬
‫و‬
‫هستند‪.‬‬
‫‪ ۸‬ثانیه برای برنام‌ههای به زبان جاوا‬
‫‪PreOrder.java‬‬
‫‪PreOrder.cpp ,‬‬
‫در این سوال‪ ،‬شما باید یک درخت )ریشه دار( را از ورودی دریافت کنید و آن را به صورت پیش ترتیب ) ‪ ( Pre Order‬پیمایش کنید‪.‬‬
‫ورودی‪:‬‬
‫در نخستین خط ورودی‪) n ،‬تعداد راس های درخت( آمده است‪ .‬فرض کنید راس های درخت‪ ،‬از ‪ ۱‬تا ‪ n‬شماره گذاری شده اند‪.‬‬
‫در خط بعدی‪ ،‬فرزندان راس شماره ی ‪ ۱‬به این صورت داده شده اند‪ :‬ابتدا تعداد فرزندان راس شماره ی ‪ ۱‬آمده است و در ادامه شماره ی هر یک فرزندان آن‬
‫سپس در خط بعدی‪ ،‬فرزندان راس شماره ی دو به همان شکل معرفی شد‌هاند و به همین ترتیب‪ ،‬فرزندان سایر راس ها در ورودی می آیند‪) .‬در هر خط‪ ،‬ابتدا تعداد‬
‫نها قرار دارند‪(.‬‬
‫فرزندان راس مربوط و پس از آن‪ ،‬شماره ی آ ‌‬
‫برای سادگی‪ ،‬شماره ی فرزندان هر یک از رئوس‪ ،‬به ترتیب صعودی )‪ sort‬شده( در ورودی ظاهر خواهند شد‪.‬‬
‫‪Sample Input:‬‬
‫‪7‬‬
‫‪3357‬‬
‫‪216‬‬
‫‪0‬‬
‫‪0‬‬
‫‪0‬‬
‫‪14‬‬
‫‪0‬‬
‫✗‬
‫ل در ورودی نمونه‪ ،‬راس شماره ی ‪ ، ۲‬ریشه درخت است!‬
‫لزومی ندارد راس شماره ی ‪ ، ۱‬ریشه درخت باشد‪ .‬مث ْ‬
‫خروجی‪:‬‬
‫در خروجی‪ ،‬شماره ی راس ها را به ترتیب پیمایش پیش ترتیب ) ‪ ( Pre Order‬در ‪ n‬خط چاپ نمایید‪.‬‬
‫‪Sample Output:‬‬
‫‪2‬‬
‫‪1‬‬
‫‪3‬‬
‫‪5‬‬
‫‪7‬‬
‫‪6‬‬
‫‪4‬‬
‫✗‬
‫ل در ورودی نمونه‪ ،‬راس ‪ ۲‬که ریشه ی‬
‫اگر راسی بیش از یک فرزند داشت‪ ،‬باید فرزندان آن راس به ترتیب شماره پیمایش شوند‪ .‬مث ْ‬
‫نگونه که در خروجی نمونه می بینید‪ ،‬ابتدا راس ‪) ۱‬و زیر درخت مربوط به آن( پیمایش شده است‬
‫درخت است‪ ،‬دو فرزند با شماره های ‪ ۱‬و ‪ ۶‬دارد‪ .‬هما ‌‬
‫و پس از آن‪ ،‬راس ‪ ۶‬به همراه زیر درختش! هم چنین در بین سه فرزند راس ‪) ۱‬یعنی ‪ ۳‬و ‪ ۵‬و ‪ ( 7‬ابتدا راس ‪ ، ۳‬سپس راس ‪ ۵‬و بعد از آن‪ ،‬راس ‪7‬‬
‫پیمایش شده اند‪) .‬یاد آوری‪ :‬همان گونه که گفته شد‪ ،‬در ورودی‪ ،‬فرزندان هر یک از راس ها‪ ،‬به ترتیب شماره ظاهر می شوند‪ .‬پس نیازی به مرتب سازی‬
‫نها نیست!(‬
‫آ ‌‬
‫محدودیت ها‪:‬‬
‫‪0n≤500000‬‬
‫محدودیت زمانی هر تست‪:‬‬
‫‪ ۴‬ثانیه برای برنام‌ههای به زبان سی پلس پلس‬
‫محدودیت حافظه برای هر تست‪:‬‬
‫‪ ۶۴‬مگابایت‬
‫و‬
‫‪ ۸‬ثانیه برای برنام‌ههای به زبان جاوا‬