بسیاری از نرمافزارهای صفحهگسترده مانند اکسل، برای عنوانِ ردیفها از اعداد و برای عنوانِ ستونها از حروف استفاده میکنند. در این سوال شما باید برنامهای بنویسید که با گرفتن شمارهی ستون، عنوانِ آن ستون را نشان دهد.
همهی ۲۶ حرف انگلیسی (A تا Z) برای عنوان ستونها استفاده میشوند. عنوان ستونها بر اساس تعداد حرفهایشان و سپس به صورت لغتنامهای مرتب میشوند. در نتیجه عنوان ۲۶ ستون اول یک حرفی و ۲۶×۲۶ ستون بعدی دو حرفی خواهد بود. در زیر شمایی از ترتیب عنوانها را میبینید:
A, B, C, …., Z, AA, AB, AC, …., AZ, BA, BB, …, ZY, ZZ
شمارهی ستونها از یک شروع میشود. یعنی ستون شمارهی یک عنوان A را دارد.
ورودی تنها شامل یک خط است که در آن شمارهی ستون آمده است. تضمین میشود عنوان ستون حتماً بین A تا ZZ باشد، در نتیجه شمارهی ستونها بین ۱ تا ۷۰۲ است.
در یک خط عنوان ستون مورد نظر را با حروف بزرگ انگلیسی چاپ کنید.
یک ماشین حساب ساده با یک نمایشگر و دو دکمهی -2
و +3
دارید. هنگامی که یکی از دکمهها را میفشارید، آن عمل بر عدد روی نمایشگر اعمال میشود. برای مثال اگر نمایشگر عدد 10
را نشان میدهد، فشردن دکمهی -2
عدد روی نمایشگر را به 8
تغییر میدهد در حالی که اگر دکمهی +3
را بفشاریم عدد روی نمایشگر به 13
تغییر میکند.
دو عدد صحیح و به شما داده شده است. نمایشگر در ابتدا عدد را نمایش میدهد. شما میخواهید با فشردن دکمههای ماشین حساب عدد را به تغییر دهید. دست کم چند بار دکمهای را باید فشار دهید تا عدد به تبدیل شود؟
ورودی تنها شامل یک خط است که در آن دو عدد صحیح و با فاصله از هم آمده است.
در تنها خط خروجی کمترین تعداد عمل لازم برای تبدیل به را چاپ کنید.
یک راه فشردن دکمهی +3
برای رسیدن به 13
و سپس -2
برای رسیدن به 11
و در نهایت +3
و رسیدن به 14
است. راههای دیگری برای رسیدن به همین نتیجه وجود دارد، اما هیچکدام به کمتر از سه عمل نیاز ندارند.
چون نیاز نیست دکمهای را بفشاریم.
تنها راه حل بهینه سه بار فشردن -2
است.
مشتق یک دنباله از اعداد، دنبالهای است که از تفریق هر عضو دنباله با عضو کناری آن به دست میآید. برای مثال مشتق دنبالهی برابر با است.
مشتق ام دنبالهی حاصل بار انجام عمل بالا است. برای مثال اگر دنبالهی مشتق دوم آن به شکل زیر است:
به شما دنبالهی و عدد داده میشود. شما باید مشتق ام را محاسبه کنید.
در خط اول ورودی دو عدد طبیعی و با فاصله از هم آمده است. در خط بعدی عدد با فاصله از هم آمده است که اعضای دنبالهی را نشان میدهد.
در تنها خط خروجی مشتق ام را با فاصله از هم چاپ کنید.
مثال اول در صورت سوال.
مثال دوم در صورت سوال.
پس از مرحلهی اول همهی اعداد صفر میشوند.
صفرمین مشتق دنباله برابر با خود دنباله است.
در سیستمهای کامپیوتری دادهها در قالب فایل در حافظه ذخیره میشوند. هر فایل ممکن است درون یک دایرکتوری باشد و هر دایرکتوری ممکن است درون دایرکتوریهای دیگر باشد. یک مسیر نشان دهندهی یک فایل یا دایرکتوری خاص در این ساختار است. اکثر سیستم عاملهای شبه یونیکس یک دایرکتوری ریشه دارند که شامل تمام فایلها و دایرکتوریهای دیگر به صورت مستقیم یا غیر مستقیم میشود. در این سیستم عاملها ساختار زیر برای آدرس دهی فایلها استفاده میشود:
همچنین ساختار زیر برای آدرس دهی دایرکتوریها استفاده میشود:
برای مثال /etc/passwd
فایلی به نام passwd
در دایرکتوری etc
در دایرکتوری ریشه را نشان میدهد. آدرسهای صحیح دیگر /home/user/pictures/digikala
و یا فقط /file
هستند. در این سوال ما فقط فایلها و دایرکتوریهایی را در نظر میگیریم که نامشان متشکل از حروف کوچک انگلیسی (a تا z) است.
دایرکتوری ریشه حالت خاصی است که با /
نشان داده میشود.
هنگامی که کاربر در حال کارکردن با چنین سیستم عاملیست یک دایرکتوری به عنوان دایرکتوری فعلی در نظر گرفته میشود. اینگونه کاربر میتواند بدون مشخص کردن مسیر کامل دایرکتوری فعلی به فایلهای درون آن دسترسی پیدا کند. به این روش آدرس دهی، آدرس دهی نسبی گفته میشود. برای مثال اگر دایرکتوری فعلی /home/user/pictures
باشد، کاربر میتواند به فایل /home/user/pictures/digikala
از طریق آدرس digikala
دسترسی داشته باشد. توجه کنید که به دلیل عدم وجود /
در ابتدای آدرس، مشخص میشود که مسیر از دایرکتوری فعلی شروع میشود. همچنین دایرکتوریهای داخلی نیز میتوانند اینگونه آدرس دهی شوند. برای مثال /home/user/pictures/others/digipay
میتواند به صورت others/digipay
آدرس دهی شود.
نکتهی جالبتر این است که میتوانیم با این روش به فایلهای خارج از دایرکتوری فعلی نیز دسترسی داشته باشیم. به طور دقیقتر آدرس ..
به معنی دایرکتوریای است که یک سطح از دایرکتوری فعلی بالاتر است. همچنین ../..
به معنی دایرکتوری دو سطح بالاتر از دایرکتوری فعلی است. حال اگر دایرکتوری فعلی /home/user/pictures
باشد و شما میخواهید به /home/top/data/file
دسترسی پیدا کنید میتوانید آدرس را به صورت ../../top/data/file
بیان کنید.
به شما آدرس یک فایل که میخواهید به آن دسترسی پیدا کنید و آدرس دایرکتوری فعلی داده میشود. شما باید کوتاهترین آدرس نسبی برای دسترسی به آن فایل را پیدا کنید. برای مثال اگر دایرکتوری فعلی /home/user/pictures
باشد شما باید ../movies/title
را به ../../user/movies/title
در هنگام دسترسی به فایل /home/user/movies/title
ترجیح دهید.
بعضی از فایلها و دایرکتوریها ممکن است نامهای مشترک داشته باشند، اما غیر ممکن است که دو فایل یا دو دایرکتوری یا یک فایل و یک دایرکتوری، با نام یکسان درون یک دایرکتوری وجود داشته باشد. پس کلیهی آدرسها یکتا هستند. ورودیهای مساله آدرسهای درست هستند و در مسیرهای داده شده تناقض وجود نخواهد داشت. برای مثال آدرس فعلی /home/user/digikala/other
و فایل /home/user/digikala
با هم در تناقض هستند. زیرا همزمان یک دایرکتوری و فایل با نام digikala
در دایرکتوری user
وجود دارد.
در سطر اول ورودی آدرس فایل مورد نظر و در سطر دوم آدرس دایرکتوری فعلی داده شده است. طول هیچ آدرسی بیشتر از ۵۰ کاراکتر نخواهد بود. تضمین میشود آدرسها درست و دارای تناقض نخواهند بود. نام فایلها و دایرکتوریها نیز فقط از حروف کوچک انگلیسی (a تا z) تشکیل شده است.
در تنها خط خروجی آدرس نسبی فایل مورد نظر را از دایرکتوری فعلی چاپ کنید.
مثال صورت سوال.
مثال دیگر صورت سوال.
دایرکتوری ریشه را فراموش نکنید.
نام برخی فایلها و دایرکتوریها ممکن است یکسان باشد.
نام فایلها یا دایرکتوریها ممکن است root
باشد و به این معنی نیست که دایرکتوری ریشه هستند.
قورباغهای روی محور اعداد زندگی میکند. جزیره روی محور اعداد وجود دارد و امین جزیره در نقطهی قرار دارد، (). قورباغه در ابتدا در نقطهی است. او با هر پرش میتواند به جزیرهای به فاصلهی حداکثر برود. او نمیتواند به نقطهای برود که جزیرهای وجود ندارد.
یک جزیره قابل دسترسی است اگر قورباغه بتواند با تعدادی پرش به آن برسد. تعداد جزیرههای قابل دسترسی چند تاست؟
در خط اول ورودی دو عدد طبیعی و با فاصله از هم آمده است. در خط دوم ورودی اعداد با فاصله از هم آمده است که بیانگر موقعیت جزیرههاست.
در تنها خط ورودی تعداد جزیرههای قابل دسترسی را چاپ کنید.
قورباغه در نقطهی ۴ قرار دارد و حداکثر طول پرشش ۱ است. در نتیجه فقط به جزیرههای واقع در ۳، ۴ و ۵ میتواند برود.
او به تمام ۵ جزیره میتواند برود.
همکاران بخش مرکز پردازش دیجیکالا در حال تکمیل تعدادی سبد خرید هستند و ما میخواهیم بدانیم که تکمیل شدن تمام سبدها چهقدر طول میکشد.
برای هر سبد، سرعت تکمیل سبد برحسب تعداد کالاهایی که در هر ساعت اضافه میشوند و تعداد دقایق مانده تا تکمیل سبد بر اساس سرعتش داده شده است. مجموع سرعت تمام سبدها برابر با توان تمام همکاران دیجیکالا است و تا پایان تکمیل شدن تمام سبدها ثابت باقی خواهد ماند و در هر لحظه به طور کامل استفاده خواهد شد.به این معنی که وقتی یک سبد تکمیل میشود، همکاران آزاد شده در بستن سبدهای دیگر کمک خواهند کرد. شیوهی تقسیم شدن همکاران برای تکمیل سبدها در پاسخ نهایی تاثیری نخواهد داشت.
برای مثال دو سبد را در نظر بگیرید:
بعد از ۹ ثانیه، سبد دوم تکمیل خواهد شد و سبد اول هنوز ۵ دقیقه زمان لازم دارد؛ اما این زمان بر اساس سرعت قبلی محاسبه شده است. همکاران آزاد شده به کمک همکاران سبد اول خواهند رفت و سرعت جدید آن ۲ + ۳ = ۵ خواهد شد و زمان جدید پس از محاسبه برابر با ۳ دقیقه خواهد بود. پس تمام سبد ها پس از ۱۲ دقیقه تکمیل خواهند شد.
به شما وضعیت فعلی سبدها داده خواهد شد. شما باید محاسبه کنید چند دقیقهی دیگر تمام سبدها تکمیل خواهند شد.
خط اول ورودی شامل عدد نشان دهندهی تعداد سبدهاست. در خط بعدی در هر خط دو عدد و با فاصله از هم آمده است که به ترتیب نشان دهندهی سرعت تکمیل سبد و زمان باقیمانده است.
در تنها خط خروجی زمان باقیمانده برای تکمیل شدن تمام سبدها را با سه رقم اعشار چاپ کنید.
مثال صورت سوال.
یک صف دو طرفه شامل عضو داریم. شما باید چند عضو خاص از این صف را بیرون بیاورید.
میتوانید سه عمل زیر را بر روی صف انجام دهید:
به شما اندازهی صف و اندیس عضوهای مورد نظر داده شده است. بگویید حداقل چند عمل چرخش برای بیرون آوردن عضوهای مورد نظر به ترتیب داده شده نیاز است؟
در سطر اول ورودی دو عدد طبیعی و ، به ترتیب نشان دهندهی تعداد اعضای صف و تعداد اعضای مورد نظر، با فاصله از هم آمده است. در سطر دوم ورودی اعداد ، نشان دهندهی اندیس عضوهای مورد نظر، با فاصله از هم آمده است. اعضای این دنباله دو به دو متفاوتند.
در تنها سطر خروجی تعداد اعمال چرخش لازم برای بیرون آوردن اعضای مورد نظر به ترتیب داده شده را چاپ کنید.
عضوها به همان ترتیبی که در صف ظاهر شدهاند بیرون میآیند و چرخشی لازم نیست.
برای بیرون آوردن اولین عضو یک چرخش به چپ نیاز است. سپس برای بیرون آوردن المان دوم سه چرخش به راست نیاز است. المان سوم را نیز میتوان با چهار چرخش به راست یا چپ بیرون آورد.
در سالهای اخیر تولید کنندههای CPU، در تلاش بودهاند تا پردازندههایی با تعداد هستههای پردازشی بیشتری تولید کنند. گاهی اوقات استفاده از چندین هسته برای پردازشهای حجیم برای برنامهنویسها چالش برانگیز میشود. معمولا وقتی پردازشی حجیم به چند بخش شکسته میشود، هزینهی محاسباتی جدیدی برای شکستن کار و جمع بندی نتایج پردازش به وجود میآید. برای مثال انتظار داریم پردازشی که بر روی یک هسته در ۱۰۰۰ میلیثانیه انجام میشود، روی دو هسته در ۵۰۰ میلیثانیه انجام شود در حالی که در واقعیت ۶۵۰ میلیثانیه زمان صرف پردازش میشود.
تیم شما میخواهد پردازشی حجیم انجام دهد. برای این پردازش واحد محاسبه نیاز است انجام شود. اگر از چندین هسته برای انجام پردازش استفاده کنیم، پردازش به صورت برابر بین هستهها تقسیم میشود. برای مثال اگر ۱۰۰۰ واحد محاسبه را بین ۳ پردازنده تقسیم کنیم هر پردازنده باید دقیقا واحد محاسبه انجام دهد.
شما تعدادی سیستم در دسترس دارید تا محاسبه را بر روی آنها انجام دهید. هر سیستم تعدادی هسته دارد و سرعت پردازش هستههای هر سیستم یکسان است. شما باید یکی از سیستمها را برای پردازش خود انتخاب کنید و تصمیم بگیرید از چند هستهی آن برای پردازش استفاده میکنید.
سیستمها از ۱ تا شماره گذاری شدهاند. سیستم ام هسته دارد و هر هستهی آن میتواند در هر میلیثانیه واحد محاسبه انجام دهد.
به دلیل سربار پردازش موازی، واحد محاسبه به ازای هر هسته بعد از اولین هسته به حجم کلی محاسبات اضافه میشود. این ثابت برای تمام سیستمهای شما یکسان است.
شما باید کوچک ترین عدد مثبت را بیابید که پردازش را میتواند در میلیثانیه با تعدادی از پردازندههای یکی از سیستمها انجام داد.
در خط اول ورودی اعداد ، و با فاصله از هم آمده است. در خط بعدی به ازای هر پردازنده اعداد و با فاصله از هم آمده است.
در تنها خط خروجی عدد را چاپ کنید.
توان پردازشی دو سیستم یکسان است ولی به دلیل سربار پردازش موازی از دو پردازندهی سیستم اول استفاده میکنیم.
مشخصات پردازندههای امروزی تقریبا اینگونه است.