تمرین عملی شماره ۲ طراحی الگوریتمها ،نیمسال اول ۸۸-۸۹ نکات کلی • شما باید بتوانید برنامههایی به یکی از زبانهای Javaیا C++بنویسید که مسالههایی که در ادامه میآیند را در زمانی کارا حل کنند. • برنامههای شما تحویل حضوری خواهند داشت .بنابراین باید به برنامه خود مسلط باشید. • برای اجرای برنامههای شما محدودیت زمانی و حافظهای وجود دارد .محدودیت زمانی شما در حدود چند ده ثانیه و محدودیت حافظه در حدود چند ده مگابایت هست. • سروری برای تستکردن برنامههای شما آماده خواهد شد که میتوانید به کمک آن برنامه خود را چک کنید .تایید درستی برنامه شما توسط سرور نشانه گرفتن نمره کامل نیست و نمره نهایی پس از تحویل حضوری دادهخواهد شد. • برنامههای شما باید از ورودی استاندارد چیزهایی بخوانند و در خروجی استاندارد چیزهایی بنویسند .ورودی استاندارد خود شامل توضیحات چند تست مجزا است و خروجیهای مربوط به تستها را باید با همان ترتیب در خروجی استاندارد بنویسید. • برای آشنایی شما در ادامه پیادهسازی راهحل یک سوال ساده به هر دو زبان Javaو C++آمده. • در راهحلهای به زبان Javaشما باید فقط یک فایل بنویسید که شامل فقط یک کالس publicباشد )میتواند کالسهای غیر از publicدر همان فایل باشد( .فایل شما باید همنام کالس publicباشد .در ضمن کالس publicشما باید mainداشتهباشد و برنامه شما برای اجرا با صدا زدن تابع mainشروع خواهد شد. صورت سوال شما باید از ورودی ابتدا یک عدد صحیح Tکه نمایانگر تعداد تستهاست را بخوانید .سپس از Tسطر بعد ،از هر سطر مشخصات یک تست را خوانده و جواب آن را در خروجی بنویسید. مشخصات هر تست شامل دو عدد صحیح است .جواب تست برابر جمع این دو عدد است. در ادامه دو پیادهسازی صحیح راهحل این سوال آمدهاند. ۱ Java پیادهسازی به زبان import java . u t i l . ∗ ; import java . io . ∗ ; public class Solution { p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) throws IOException { S c a n n e r s c a n n e r=new S c a n n e r ( System . i n ) ; i n t T=s c a n n e r . n e x t I n t ( ) ; f o r ( i n t t e s t =0; t e s t <T ; t e s t ++){ i n t a=s c a n n e r . n e x t I n t ( ) ; i n t b=s c a n n e r . n e x t I n t ( ) ; System . o u t . p r i n t l n ( a+b ) ; } } } C++ پیادهسازی به زبان #i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; i n t main ( ) { int T; c i n >>T ; f o r ( i n t t e s t =0; t e s t <T ; t e s t ++){ int a , b ; c i n >>a>>b ; c o u t <<a+b<<e n d l ; } return 0; } 2 سوال ] ۱برنامه نویس دوره گرد[ شایان برنامهنویس دورهگردی است که با مسافرت به شهرهای مختلف مشکالت برنامهنویسی مردم را برطرف میکند! او میخواهد از یک شهر شروع به حرکت کند و تمام شهرها را مالقات کرده و به شهر مبدا برگردد .مسئله این است که او میخواهد کوتاهترین دور ممکن را انتخاب کند .نقشه کشور شایان به صورت یک گراف کامل وزندار در ورودی به شما داده میشود. ورودی استاندارد ورودی شامل تعدادی تست است که هر کدام بهصورت زیر داده میشوند. در خط اول عدد ۳ ≤ n ≤ ۲۵و در n − ۱خط بعد نیمه پایین ماتریس مجاورت گراف با وزنهای صحیح بین ۰و ۱۰۰۰۰داده میشود. انتهای ورودی با یک ۰مشخص میشود که شما برای آن ۰کاری نباید انجام دهید. خروجی استاندارد شما باید در خروجی برای هر تست در خط اول طول دور مینیمم و در خط بعد nعدد که ترتیب مالقات شهرها را نشان میدهند چاپ کنید. خروجی نمونه ورودی نمونه 3 3 1 1 2 3 1 1 22 4 1 4 2 3 10 10 1 1 10 10 0 ۳ سوال ] ۲جادهسازی[ نیما جادهساز مشهوریست .او بهتازگی ماموریتیافته که تعدادی جادهی جدید درست کند بهطوریکه بتوان از هر شهر به هر شهر دیگر با استفاده از یک یا تعدادی جاده رسید .او میخواهد بهنحوی این جادهها را بکشد که مجموع طول جادههای جدید مینیمم باشد. برنامهای بنویسید که این مقدار مینیمم را حساب کند .شهرهای کشور نیما در صفحه مختصات قرار دارند و در ابتدای کار تعدادی جاده که از قدیم مانده وجود دارد .همچینین اگر دو جاده با هم تقاطع داشته باشند نمی توان در آن تقاطع جاده را عوض کرد )میتوانید فرض کنید که جادهها هوایی هستند و هیچ دو جادهای تقاطع ندارند(. ورودی استاندارد ورودی شامل تعدادی تست میباشد .در سطر اول ورودی ابتدا تعداد تستها آمدهاست و پس از آن تستها بهترتیب داده میشوند. در سطر اول هر تست عدد ۱ ≤ n ≤ ۵۰۰۰آمده که نشانگر تعداد شهرها میباشد .در nسطر بعد در هر سطر دو عدد صحیح آمده که مختصات شهر iمیباشد .پس از آن در خط بعد ۰ ≤ m ≤ ۵۰۰۰۰۰آمده که تعداد جادههای از قدیم بهجامانده است .سپس در m خط بعد در هر خط شماره شهرهای دو سر یکی از این جادهها میآید )شماره شهرها بین ۱و nهستند(. خروجی استاندارد برای هر تست در خروجی در یک خط شما باید کمترین طول ممکن برای همبند سازی این کشور را با دقت دو رقم اعشار بدهید .برای چاپ یک عدد از نوع doubleدر C++از دستور ) printf(“%.2lf\n”,xو در Javaاز دستور استفادهکنید. ۴ )System.out.printf(“%.2f\n”,x خروجی نمونه ورودی نمونه 2 1 3 4 4.41 2 4.41 4 103 104 104 100 104 103 100 100 1 4 2 4 103 104 104 100 104 103 100 100 1 4 2 ۵ سوال ] ۳جداکننده[ گراف جهتداری با n راس و m یال دادهشدهاست .میخواهیم تعدادی از یالهای این گراف را حذف کنیم بهطوریکه هیچ مسیر جهتداری از راس ۱به راس nوجود نداشتهباشد .هزینه حذف کردن یالها با هم متفاوت است و در ورودی به شما داده میشود .شما باید این کار را با کمترین هزینه انجام دهید و این کمترین هزینه را در خروجی چاپ کنید. ورودی استاندارد ورودی شامل تعدادی تست میباشد .در سطر اول ورودی ابتدا تعداد تستها آمدهاست و پس از آن تستها بهترتیب داده میشوند. در ابتدای هر تست ۲ ≤ n ≤ ۱۰۰۰و ۰ ≤ m ≤ ۱۰۰۰۰۰بهترتیب آمدهاند .در mسطر بعد در هر سطر مشخصات یک یال آمده که دو عدد اول دو سر آن یال را مشخص می کند و عدد سوم هزینهی حذف آن را. خروجی استاندارد در خروجی بهازای هر تست کمترین مقدار هزینه را در یک سطر جدا چاپ کنید. خروجی نمونه ورودی نمونه 6 1 5 5 1 2 4 1 3 5 2 4 6 3 4 3 4 5 6 ۶ سوال ] ۴رنگزنی[ تعداد nتوپ در یک ردیف دادهشدهاست .میخواهیم تعدادی از این توپها را رنگ کنیم بهنحویکه بین هر mتوپ متوالی حداقل دو تا از آنها رنگ شدهباشند .هزینهی رنگکردن توپ iام ciمیباشد .میخواهیم بهنحوی این کار را انجام دهیم که مجموع هزینه رنگکردن مینیمم شود. ورودی استاندارد ورودی شامل تعدادی تست می باشد .در سطر اول ورودی ابتدا تعداد تستها آمدهاست و پس از آن تستها بهترتیب داده میشوند. در سطر اول هر تست دو عدد ۲ ≤ n ≤ ۱۰۰۰۰و ۲ ≤ m ≤ ۱۰۰آمدهاست .در سطر بعد nعدد آمده که عدد iام هزینه رنگکردن توپ (ci ) iمی باشد. خروجی استاندارد در خروجی به ازای هر تست مینیمم هزینه رنگکردن توپها را در یک سطر مجزا چاپ کنید. خروجی نمونه ورودی نمونه 9 1 6 3 1 5 6 2 1 3 ۷ سوال ] ۵گراف خطرناک[ گرافی جهتدار با nراس و mیال به ما دادهشدهاست .روی هر کدام از یالهای این گراف جهتدار دو عدد نوشتهشده که یکی طول آن یال و دیگری درجه خطر آن یال میباشد .شما باید یک مسیر جهتدار از راس ۱به راس nپیدا کنید بهطوریکه طول مسیر از Lکمتر باشد و درجه خطر آن )بیشترین درجه خطر یالهای آن مسیر( مینیمم باشد. ورودی استاندارد ورودی شامل تعدادی تست می باشد .در سطر اول ورودی ابتدا تعداد تستها آمدهاست و پس از آن تستها به ترتیب داده میشوند. در سطر اول هر تست به ترتیب ۱ ≤ n ≤ ۱۰۰و ۰ ≤ m ≤ ۱۰۰۰۰و ۱ ≤ L ≤ ۱۰۰۰۰۰۰دادهشدهاست .در mسطر بعد در هر سطر مشخصات یک یال آمدهاست که به ترتیب شمارهی رئوس دو سر آن یال و بعد از آن طول و درجه خطر آن آمدهاست. خروجی استاندارد به ازای هر تست در خروجی در یک سطر یک عدد به عنوان کمترین درجه خطر ممکن و در سطر بعدی شماره راسهای مسیر را بهترتیب چاپ کنید. خروجی نمونه ورودی نمونه 1 5 3 3 10 1 2 3 1 2 3 4 2 3 5 5 1 3 11 2 ۸
© Copyright 2025 Paperzz