شما عدد صحیح مثبتی با نام m و نیز عدد صحیح نامنفی با نام s در اختیار دارید ، وظیفه شما یافتن کوچکترین و بزرگترین عددی است که دارای طول m و مجموع ارقام s باشد ، اعداد مورد نیاز باید صحیح ، غیر منفی ، در مبنای ۱۰ و با صفر آغاز نشود.
ورودی در یک خط دو عدد m و s که به صورت زیر هستند را دریافت میکند:
در خروجی دو عدد صحیح غیرمنفی در یک خط چاپ میشود که به ترتیب کوچکترین عدد موجود و بزرگترین عدد موجود میباشد. اگر هیچ عددی با توجه به شرایط مطلبوب وجود نداشت خروجی باید به شکل 1- 1-
باشد.
مثال:
خروجی | ورودی |
---|---|
96 69 | 15 2 |
1- 1- | 0 3 |
نمرههای درس «آمار» این ترم پایین بوده و استاد تصمیم گرفته نمرهی دانش آموزان را افزایش دهد. اگر نمرهی دانش آموز را در نظر بگیریم، استاد میخواهد نمرهی را برای او ثبت کند، به طوری که شرایط زیر برقرار باشد:
تمامی ها طبیعی هستند.
برای اینکه نمرهها به صورت منطقی افزایش یابند، استاد میخواهد میانگین نمرات بعد از افزایش برابر با عدد شود و در بین حالتهایی که این ویژگی را دارند، پراکندگی نمرات کمینه شود. پراکندگی یک دنبالهی دلخواه مانند با میانگین برابر است با :
سطر اول ورودی شامل دو عدد طبیعی ، تعداد دانش آموزان، و عدد ، به طوری که است.
در سطر دوم دنبالهی آمده است به طوری که نشاندهندهی نمرهی دانشآموز است. دنبالهی ها اکیدا صعودی است.
دنبالهی را در خروجط چاپ کنید. در صورت وجود چندین جواب یکی را به دلخواه چاپ کنید.
ورودی نمونه ۱
خروجی نمونه ۱
ورودی نمونه ۲
خروجی نمونه ۲
۲۶امین دوره المپیاد کامپیوتر - آزمون اول- ۱۳۹۴/۵/۳۱
این برنامه ۳ عدد ورودی میگیرد که عددهای اول و دوم به ترتیب تعداد سطر و ستون ماتریس اول هستند و عددهای دوم و سوم به ترتیب تعداد سطر و ستون ماتریس دوم هستند؛ سپس مقدار هر درایه ماتریس را گرفته و ضرب دو ماتریس را چاپ میکند.
ورودی نمونه
خروجی نمونه
در پی بومیسازی مار و پله به بازی زیر دست یافتیم:
مهرهای داریم روی نقطهي صفر محور یک بعدی مختصات. این مهره تنها به سمت راست حرکت میکند. همچنین در این بازی به جای مار و پله آیتم جدید به نام ماپله داریم. ماپلهها به این صورت هستند که دو سر دارند. یکی در خانهی و دیگری در و هرگاه مهرهی ما به یکی از دو سر ماپله برسد از سمت دیگر ماپله ظاهر میشود. به ازای هر بار که مهرهی ما در دام یک ماپله بیفتد باید یک ریال جریمه بپردازیم. بازی هنگامی تمام میشود که مهرهی ما به سمت راست سمت راستترین ماپله برسد در واقع در سمت راست آن دیگر سر هیچ ماپلهای نباشد. همچنین ماپلهی اولیه بر روی محور مختصات موجود است . شما باید مکان ماپلهی جدید را طوری تعیین کنید که جریمهی پرداختی توسط ما بیشینه شود. مختصات ماپلههای جدیدی میتواند هر مقداری باشد و لزومی ندارد که اعداد صحیح باشد ولی ماپلههای ابتدایی همگی روی نقاط صحیح قرار دارند. همچنین دو سر ماپله نمیتواند روی هم بیفتد.
راهنمایی : ماپلهها هر طور که قرار گرفته باشند مهرهي ما به صورت یکتا حتما به سمت راست آخرین ماپله خواهد رسید.
در تنها سطر خروجی بیشینه مقدار جریمهای که باید بپردازیم را بنویسید.
ورودی نمونه ۱
خروجی نمونه ۱
ورودی نمونه ۲
خروجی نمونه ۲
مثلثی از اعداد وجود دارد(مانند شکل 2). برنامهای بنویسید که بزرگترین مجموع مسیر از ریشه تا برگ را محاسبه نماید. ریشه بالاترین عدد و برگ در پایینترین قسمت قرار دارند و تنها مسیرهایی مدنظر است که از ریشه شروع شود، از تمام سطوح گذشته و در برگ خاتمه یابد.
در سطر اول تعداد نمونه t
مشخص شده است. در هر قسمت بعد در سطر ابتدایی عدد تعداد سطوح مثلث آورده شده است. در n
خط دنبالهی آن در خط i
ام که بین 1 تا n
است i
عدد بین 0 تا 99 دریافت میشود.
برنامهی شما باید به ازای هر نمونه یک عدد شامل بزرگترین مجموع مسیر از ریشه تا برگ را محاسبه نماید.
نمونه ورودی
نمونه خروجی
همانطور که میدانید ماشین زمان اختراع شده و حتی آقابزرگ هم برای آزمایش از آن استفاده کرده است. هدف او رفتن به سال 1500 بوده ولی ظاهرا ماشین مشکلاتی داشته و او به زمانی دیگر رفته است. محققان اثبات کرده اند که از ابتدا تا نابودی سیارهی زمین را میتوان با استفاده از خاصیت «کیتی» n
نقطه بحرانی از زمین به k
عصر مختلف تقسیم کرد که باشمارههای 1 تا k
شمارهگذاری شدهاند. به طور دقیقر به هر عصر یه رشتهی n
بیتی اختصاص داده شده به طوری که اگر نقطهی i
ام در آن عصر خاصیت «کیتی» داشته باشد، بیت i
ام آن یک است و در غیر این صورت برابر با صفر است(دانستن خاصیت یتی تأثیری بر حل سوال نخواهد داشت). رشتهی مربوط به هیچ دو عصری یکسان نیست.
آقا بزرگ میخواهد در سریعتری زمان ممکن بفهمد در کدام عصر قرار دارد. برای این کار او میتواند یکی از نقاط بحرانی زمنی را انتخاب کند و در آن قرار بگیرد. سپس میتواند برای انتقال بین نقاط بحرانی از جادههای باستانی زمین استفاده کند. این جاده ها دو طرفه هستند و بین n
نقطهی بحرانی ساخته شدهاند و آقابزرگ می دند که برای عبور از هریک از جادهها چقدر زمان نیاز دارد. آقابزرگ، در ره نقطهی بحرانی میتواند خاصیت «کیتی» آن نقطه را بررسی کند. او بسیار باهوش است و در نتیجه در اولین لحظهای که بتواند با توجه به خواص کیتی نقاط بحرانی عصر فعلی را تشخیص دهد، متوقف میشود و بلافاصله به سال 1500 می رود. آقا بزرگ بسیار عجله دارد و میخواهد هرچه سریعتر به سال 1500 برود. به همین دلیل، میخواهدبدانه مستقل از عسری که در آن است، حداکثر چقدر زمان لازم دارد تا بتواند به سال 1500 برود؟
سطر اول ورودی شامل سه عدد طبیعی k
تعداد عصرهای مختلف زمین، n
تعداد نقاط بحرانی، m
تعداد جادههای باستانی است.
در سطر i
ام از k
سطر بعدی، رشتهی n
بیتی متناظر با عصر i
ام آمده است.
در هر یک از m
سطر بعدی، عدد w, v ,u
آمده است که وجود یک جادهی باستانی بین دو نقطهی بحرانی u
و v
است به طوری که طی کردن آن توسط آقابزرگ، w
ثانیه طول می کشد.
در تنها سطر خروجی، پاسخ مسئله را چاپ کنید.
ورودی نمونه ۱
خروجی نمونه ۱
ورودی نمونه ۲
خروجی نمونه ۲
۲۶امین دوره المپیاد کامپیوتر - آزمون اول - ۱۳۹۴/۵/۳۱
یک لیست از n
عدد نامرتب داریم، میخواهیم عنصری که در این لیست بیش از نصف طول لیست تکرار شده است را از روشی مشابه quick sort
در صورت وجود بیابیم. شما باید برنامهای بنویسید که این لیست اعداد را بگیرد و در خروجی اگر چنین عنصری وجود داشت آن را چاپ کند و در غیر این صورت None
چاپ شود.
در سطر اول تعداد اعداد و در سطر بعد لیست اعداد ورودی
نمونه ورودی ۱
نمونه خروجی ۱
نمونه ورودی ۲
نمونه خروجی ۲
برنامهای بنویسید که یک عدد صحیح n
از کاربر بگیرد و پس از آن n
رشته را از ورودی بگیرد. خروجی برنامه بزرگترین رشتهای مانند s
خواهد بود که هرکدام از رشتهها s
و یا وارون آن را به عنوان زیر رشته داشته باشند، اگر زیر رشته ی مشترکی وجود نداشت چیزی چاپ نشود.
زیر رشتهای که در خروجی چاپ میشود، باید به فرمی باشد که در رشته اول قرار دارد، مثلاً در مثال زیر ، باید CDEF
چاپ شود، نه FEDC
نمونه ورودی
نمونه خروجی
فرض کنید به شما دو دنباله داده شده است و شما مسئول آن هستید که ببینید آیا ترتیب کاراکترها در دنباله دوم، همان ترتیب در دنباله اول است یا خیر؟ کافیست از راست یا از چپ ترتیب حفظ شود.
مثلاً اگر دنباله اول abcdefghi
و دنباله دوم bfhi
باشد، ترتیب از چپ به راست در اولی حفظ شده است. مثالی دیگر که ترتیب را از راست به چپ حفظ کند، دنباله اول abcdefghi
و دنباله دوم gfdb
است که ترتیب آمدن اعضای دنباله دوم در اولی از راست به چپ است و ترتیب را حفظ کرده است.
مثالی بزنیم که ترتیب را نه از راست به چپ و نه از چپ به راست، حفظ نکرده باشد. دنباله اولی abcdefghi
و دنباله دومی bgic
.
برنامهای بنویسید که با گرفتن دنبالهها، مشخص کند آیا ترتیب (چه از راست و چه از چپ) حفظ شده است یا خیر.
توجه: ممکن است در دنباله دوم کاراکتری بیاید که در اولی نیست. روشن است که در این صورت پاسخ منفی است و ترتیب حفظ نشده است.
توجه: ممکن است از هر کاراکتر به هر تعداد موجود باشد. کافیست در یکی از حالات ترتیب حفظ شده باشد تا پاسخ مثبت باشد. برای مثال اگر دنباله اول abacdfeag
و دنباله دوم bca
باشد ترتیب حفظ شده است (با در نظر گرفتن آخرین a
).
در خط اول به شما عدد داده میشود که بیانگر تعداد زوجهای دنبالههاست. سپس به ازای هر زوج دنباله، در یک خط دنباله اول و در خط بعدی دنباله دوم میآید.
به ازای هر زوج دنباله اگر ترتیب حفظ شده است، YES
وگرنه NO
را چاپ کنید.
فرض کنید یک ردیف کتاب داریم که آنها را در یک قفسه از کتابخانه از چپ به راست چیدهایم. در این کتابخانه برای گذاشتن و برداشتن کتابها نظم خاصی وجود دارد به این صورت که اگر بخواهیم یک کتابی را در این قفسه بگذاریم فقط میتوانیم آن را سمت چپ یا سمت راست کتابها بگذاریم و برای برداشتن نیز فقط میتوانیم از سمت چپ کتاب برداریم.
در اصل میتوانیم سه عمل زیر را روی این ردیف کتاب انجام دهیم:
(AddRight(X
: در این عمل کتاب با نام X
را به سمت راست کتابها اضافه میکنیم.(AddLeft(X
: در این عمل کتاب با نام X
را به سمت چپ کتابها اضافه میکنیم.RemoveLeft
: در این عمل کتاب سمت چپ را از قفسه برمیداریم.میخواهیم برنامهای بنویسیم که ابتدا یک دسته کتاب را به عنوان ورودی گرفته و سپس تعدادی از عملهای بالا را روی آن انجام دهد و دسته کتاب نهایی را به عنوان خروجی چاپ کند.
برای پیادهسازی این برنامه لازم است از دادهساختار لیست پیوندی استفاده کنید.
لیست پیوندی (Linked list)
ساختاری شامل دنبالهای از عناصر است که هر عنصر دارای اشارهگری به عنصر بعدی در دنباله است.
برای پیادهسازی لیست پیوندی برای این مسئله یک struct Book
تعریف میکنید که شامل یک string Name
برای نگهداری نام کتاب و یک Book* Next
برای اشاره به عنصر بعدی است.
سمت چپترین کتاب را اولین کتاب و راستترین کتاب را آخرین کتاب در نظر میگیریم و همچنین کتاب بعدی هر کتاب را کتاب بلافاصله سمت راست آن در نظر میگیریم. دو اشارهگر مانند Book* first
و Book* last
برای اشاره به کتاب اول و کتاب آخر نگهداری میکنیم. پس از هر عمل حذف یا اضافه در سمت چپ یا راست یکی از این دو اشارهگر باید به روزرسانی شوند.
برای هر عمل اضافه کردن کتاب ، باید از دستور new
برای گرفتن حافظه برای Book
جدید استفاده کنید و برای هر عمل حذف ، برای جلوگیری از نشت حافظه باید کتاب مورد نظر را با استفاده از دستور delete
از حافظه پاک کنید.
در ادامه لیست دستوراتی که به برنامه داده میشود و مفهوم آنها آمده است:
command | description |
---|---|
AddLeft BookName | با دیدن این عبارت، باید یک کتاب به ابتدای کتابخانه(سمت چپ) اضافه شود |
AddRight BookName | با دیدن این عبارت، باید یک کتاب به انتهای کتابخانه (سمت راست) اضافه شود |
DeleteLeft | با دیدن این عبارت، باید چپترین کتاب در کتابخانه را حذف کنید |
Exit | با دیدن این کاراکتر، برنامه به پایان میرسد و ابتدا تعداد کتابهای داخل کتابخانه را چاپ کنید و سپس لیست کتابهای داخل کتابخانه را به ترتیب از چپ به راست چاپ کنید |
ابتدا یک عدد n
در ورودی داده میشود که نشانگر تعداد کتابهای داخل کتابخانه در ابتدای کار است سپس n
رشته به ترتیب چپ به راست که هر کدام نام یکی از کتابهاست. (نام هر کتاب رشتهای به طول حداکثر ۱۳۳ میباشد و از حروف کوچک و بزرگ انگلیسی و اعداد تشکیل شده است.(ممکن است در نام یک کتاب space
نیز وجود داشته باشد.)
سپس در هر مرحله یکی از دستورات بالا داده میشود.
تعداد دستوراتی که به برنامه داده میشود حداکثر میباشد.
در سطر اول تعداد کتابهای موجود در کتابخانه چاپ شود. در سطرهای بعدی در هر سطر نام یک کتاب از کتابهای موجود در کتابخانه چاپ شود. ترتیب چاپ کتابها از چپ به راست میباشد.
ورودی نمونه
خروجی نمونه
خانم دکتر دنبالهای از اعداد طبیعی دارد. همانطور که میدانید دکترها برعکس مهندسها از صعودیبودن دنبالهها لذت میبرند ولی بلد نیستند دنبالههایشان را صعودی کنند. برای همین خانم دکتر از آقای مهندس خواستهاست تا دنبالهاش را برایش صعودی کند. (منظور از دنبالهی صعودی دنبالهای است که هیچ عضوی از آن از عضو قبلیاش کمتر نیست) آقای مهندس در هر حرکت میتواند یکی از ارقام یکی از اعداد دنباله را حذف کند. دقت کنید که وقتی تمامی ارقام یکی از اعداد دنباله را حذف کنیم مقدارش صفر خواهد شد.
او به عنوان یک مهندس مجبور است در کمترین تعداد حرکت دنباله را صعودی کند. این کمترین تعداد حرکت چقدر است؟ همچنین او میخواهد جمع اعداد دنبالهی نهایی که با کمترین تعداد حرکات به آن میرسد کمینه باشد. (در عین استفاده از کمترین تعداد حرکت) این مجموع کمینه را نیز پیدا کنید.
سطر اول ورودی شامل عدد طبیعی ، تعداد اعداد دنباله، است.
در سطر بعد عدد طبیعی آمدهاست که اعداد دنباله را نشان میدهند.
هیچ کدام از اعداد دنباله رقم ندارند.
در سطر اول خروجی کمترین تعداد حرکت برای صعودی کردن دنباله را چاپ کنید.
در سطر دوم عدد چاپ کنید که اعداد دنباله نهایی را نشان میدهند که هم باید صعودی باشند و هم مجموعشان کمینه شود. در صورت وجود چندین جواب هر کدام از آنها را میتوانید چاپ کنید.
ورودی نمونه ۱
خروجی نمونه ۱
ورودی نمونه ۲
خروجی نمونه ۲
۲۴امین دوره المپیاد کامپیوتر - آزمون هفتم - ۱۳۹۳/۰۶/۱۹
بیژن و منیژه که در مهد کودک شریف هم کلاس اند، یک بازی ساخته اند بدین صورت:
برای یک کران پایین و یک کران بالا و برای هم یک کران پایین و یک کران بالا تعیین میکنند، سپس هر کدام اعدادی برای تعیین می کنند. بازیکنی که به ازای اعداد انتخابی اش تعداد جواب بیشتری برای معادله به دست آمد، برنده است و دیگری باید مشقهایش را بنویسد!
جواب های معادله ی بالا زوج مرتب های ی هستند که , عدد صحیح هستند و و برنامه ای بنویسید تا به آن ها کمک کند برنده را مشخص کنند.
در خط اول به ترتیب و و و وارد می شود ، در خط دوم و و ای که بیژن تعیین میکند، در خط سوم و و ای که منیژه تعیین میکند
در خط اول تعداد جواب هایی که بیژن بدست می آورد، در خط دوم تعداد جواب هایی که منیژه بدست می آورد ، در خط سوم اگر تعداد جواب ها مساوی بود Tie
اگر بیژن برنده شده بود bizhan won
و اگر منیژه برنده شده بود manizhe won
چاپ شود.
ورودی نمونه
خروجی نمونه
آقای مهندس در اتاق مدیریت خود گاوصندوق بزرگی دارد که همهی اسرار بزرگ شرکت در آن نگهداری میشود. یک گاوصندوق بزرگ برای امنیت هرچه بیشتر نیاز به یک رمز خیلی بزرگ هم دارد. آقای مهندس ارقام رمز گاوصندوقش را، که یک عدد طبیعی خیلی بزرگ است، پشتسرهم روی یک تکه کاغذ دراز نوشته و آنرا همیشه در جیب کتش نگه میدارد.
بچهی آقای مهندس که امروز در مهدکودک کار با قیچی را برای ساختن کاردستی یاد گرفته، با دیدن کاغذ رمز گاوصندوق در جیب پدرش بسیار شگفتزده میشود و آن را به قطعه تقسیم میکند. (او همهی برشهایش را عمودی و بین ارقام میزند، طوری که هیچ رقمی خراب نشود و در هر تکه از کاغذ تعدادی از ارقام پشتسرهم رمز قرار بگیرد)
آقای مهندس وقتی رمز را تکهتکه میبیند، آرامش خود را حفظ میکند، و سعی میکند رمز گاوصندوق را بازسازی کند. اما تنها این را به یاد دارد که رمز بر بخشپذیر بودهاست، زیرا همانطور که میدانید عدد مورد علاقهی خانم دکتر است. حال او از شما میخواهد با گرفتن اعداد نوشتهشده روی تکههای کاغذ به او بگویید که در چند حالت چیدن تکههای کاغذ کنار هم یک رمز ممکن برای گاوصندوق درست میشود. (یعنی رمز بر بخشپذیر میشود)
در سطر اول ورودی عدد طبیعی ، تعداد قطعات کاغذ آمده است. در خط بعد اعداد طبیعی تا آمده است که عدد نوشتهشده در کاغذ ام را نشان میدهد.
اینکه
اینکه
تضمین میشود که هیچکدام از اعداد ورودی در ابتدای خود ندارند. (leading zero
ندارند)
در خروجی تعداد حالتهایی از چیدن قطعات (از مجموع حالت) که یک رمز ممکن برای گاوصندوق میسازند را چاپ کنید. (باقیمانده بر )
ورودی نمونه ۱
خروجی نمونه ۱
ورودی نمونه ۲
خروجی نمونه ۲
(۲۴امین دوره المپیاد کامپیوتر - آزمون سوم - ۱۳۹۳/۰۶/۰۶)
کشور دور مورد تهاجم کشور تنبل ها قرار گرفته است. ارتش تنبل ها وارد کشور دور شده و قصد دارد هر شهری را که می تواند غارت کند. بین شهرهای کشور دور راه هایی کوهستانی با شیب های مختلف وجود دارد اما سربازان ارتش تنبلها به دلیل تنبلی فقط راه هایی را انتخاب می کنند که در مجموع کمترین شیب ممکن را طی کنند! متاسفانه پادشاه کشور دور با محدودیت سرباز مواجه است. پس تصمیم گرفته که سربازان خود را در شهرهای پراهمیت مستقر کند. او پس از مشورت با وزیران خود به این نتیجه می رسد که شهری پر اهمیت است که تعداد زیادی از مسیرهایی که ارتش تنبلها انتخاب میکنند از آن بگذرد.
حال شما باید به او کمک کنید و به او بگویید از هرشهر چه تعدادی از این مسیرها میگذرد.
در خط اول تعداد شهرها و تعداد راههای کوهستانی بین شهرهاست. سپس در m
خط بعدی در هر خط سه عدد w, j , i
میآید که مشخص می کند از شهر i
ام به شهر j
ام مسیری کوهستانی با شیب w
وجود دارد. توجه کنید که مسیرها یکطرفه میباشند.
در خروجی در سطر i
ام تعداد مسیرهایی که رأس i
ام روی آنها قرار دارد نمایش داده میشود. توجه کنید که در محاسبه این مقدار مسیرهایی که راس i
در ابتدا یا انتهای آن واقع است شمرده نمیشوند.
نمونه ورودی
نمونه خروجی
فرض کنید به شما دو دنباله داده شده است و شما مسئول آن هستید که ببینید آیا ترتیب کاراکترها در دنباله دوم، همان ترتیب در دنباله اول است یا خیر؟ کافیست از راست یا از چپ ترتیب حفظ شود.
مثلاً اگر دنباله اول abcdefghi
و دنباله دوم bfhi
باشد، ترتیب از چپ به راست در اولی حفظ شده است. مثالی دیگر که ترتیب را از راست به چپ حفظ کند، دنباله اول abcdefghi
و دنباله دوم gfdb
است که ترتیب آمدن اعضای دنباله دوم در اولی از راست به چپ است و ترتیب را حفظ کرده است.
مثالی بزنیم که ترتیب را نه از راست به چپ و نه از چپ به راست، حفظ نکرده باشد. دنباله اولی abcdefghi
و دنباله دومی bgic
.
برنامهای بنویسید که با گرفتن دنبالهها، مشخص کند آیا ترتیب (چه از راست و چه از چپ) حفظ شده است یا خیر.
توجه: ممکن است در دنباله دوم کاراکتری بیاید که در اولی نیست. روشن است که در این صورت پاسخ منفی است و ترتیب حفظ نشده است.
توجه: ممکن است از هر کاراکتر به هر تعداد موجود باشد. کافیست در یکی از حالات ترتیب حفظ شده باشد تا پاسخ مثبت باشد. برای مثال اگر دنباله اول abacdfeag
و دنباله دوم bca
باشد ترتیب حفظ شده است (با در نظر گرفتن آخرین a
).
در خط اول به شما عدد داده میشود که بیانگر تعداد زوجهای دنبالههاست. سپس به ازای هر زوج دنباله، در یک خط دنباله اول و در خط بعدی دنباله دوم میآید.
به ازای هر زوج دنباله اگر ترتیب حفظ شده است، YES
وگرنه NO
را چاپ کنید.