Challenger

المپیاد کامپیوتر , الگوریتم , برنامه نویسی , ترکیبیات , گراف , ....

Challenger

المپیاد کامپیوتر , الگوریتم , برنامه نویسی , ترکیبیات , گراف , ....

Challenger
طبقه بندی موضوعی
پیوندهای روزانه

پاسخ پرسش CF-197-C

پنجشنبه, ۲۵ خرداد ۱۳۹۱، ۰۲:۳۱ ب.ظ

Codeforces / Contest 197 / Problem C : Lexicographically Maximum Subsequence

صورت اصلی سوال :http://codeforces.com/contest/197/problem/C


ترجمه :
رشته s ار حروف کوچک انگلیسی داده شده ، بزرگترین زیر رشته lexicographically این رشته را بیابید .

یک زیر رشته از s تعدادی از حروف s است که به ترتیب ظاهر شدنشان در رشته در زیر رشته می آیند .

یک زیر رشته x از زیر رشته y بزرگتر است اگر اندازه x بزرگتر از y باشد در حالی که همه کاراکتر های ۱ تا |y| در دو رشته مساوی باشند یا اینکه یک مقدار r وجود داشته باشد به طوری که همه ی کاراکت های ۱ تا r در دو رشته برابر باشند و کاراکتر  r+1 ام x بزرگتر از کارکتر r+1 ام y باشد .


ورودی :

در تنها خط ورودی رشته s به شما داده می شود .

طول رشته s از 105 تجاوز نمی کند .


خروجی :

بزرگترین زیر رشته lexicographically رشته s را در خروجی چاپ کنید .



شرح راه حل :

از یک پشته (stack) کمک می گیریم و با یک بار پیمایش رشته s و یک ایده حریصانه به پرسش در زمانی خطی پاسخ می دهیم .

یک پشته به نام ans در نظر بگیرید . در هر مرحله که روی کاراکتر i ام هستیم در صورتی که کاراکتر i ام s از آخرین عضو در پشته کوچک تر است آن را به انتهای پشته اضافه می کنیم و در غیر این صورت تا زمانی که آخرین عضو ans از این کاراکتر کوچکتر شود یا اینکنه اندازه ans برابر با صفر شود ، از انتهای پشته بیرون می کنیم .(چرا ؟)

در نهایت مفداری که در پشته ans هست ، پاسخ پرسش ، یعنی بزرگترین زیر رشته lexicographically از رشته s است .


کد : https://snipt.net/JahanaraCo/cf-197-c
موافقین ۴ مخالفین ۱ ۹۱/۰۳/۲۵
محمد مهدی جهان آرا

Codeforces

Greedy

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی