Challenger

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

Challenger

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

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

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

سه شنبه, ۸ فروردين ۱۳۹۱، ۱۲:۲۳ ب.ظ

Codeforces / Contest 169 / Porblem C : Substring and Subsequence

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

ترجمه :

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

می خواهیم تعداد زوج های x و y را پیدا کنیم که دارای شرایط زیر باشند :

  • x زیر رشته ی s باشد
  • y زیر مجموعه ی t باشد
  • مقادیر x و y یکسان باشند

توجه کنید که تعریف زیر مجموعه و زیر رشته کاملا مجزا از هم است .

زیر رشته : یعنی بخشی از یک رشته به صورت پیوسته (از کاراکتر i ام تا کاراکتر j ام).

زیر مجموعه : یعنی تعدادی از کاراکتر های یک رشته (که البته می تواند شامل کاراکتر تکراری نیز باشد)

توجه کنید که در زیر مجموعه حروف زیر مجموعه ترتیب قرار گرفتن خود در t را حفظ می کنند.

به عنوان مثال"forces" یک زیر رشته از رشته ی "codeforces" است (از کاراکتر 5ام تا کاراکتر 10ام)

و "codercs" یک زیر مجموعه از رشته ی "codeforces" است (در حالی که یک زیر شته نیست)


ورودی :

ورودی شامل دو خط می شود

خط اول رشته ی s و خط دوم رشته ی t که هر دو تنها شامل حروف کوچک انگلیسی هستند .

طول هر دو رشته بزرگتر از 1 و کوچکتر از 5000 است .

خروجی :

در تنها خط خروجی پاسخ پرسش یعنی تعداد زوج های x و y با شرایط ذکر شده را در مد 1e9+7 چاپ کنید .

__________________________________________
الگوریتم :

در ابتدا شاید استفاده از یک روش جستجوی کامل (brute force) درست به نظر بیاید ولی در بهترین حالت این روش از یا خواهد بود که در محدودیت زمان 2 ثانیه قابل اجرا نیست.

پس از روش برنامه ریزی پویا سوال را حل می کنیم .

آرایه ans را در نظر بگیرید . هر درایه  نشان دهنده ی تعداد زوج های x و y است به طوری که x زیر رشته ای از s که آخرین کاراکتر آن کاراکتر  i ام s است است و y نیز زیر مجموعه ای از j کاراکتر اول رشته ی t است .

به ازای هر رابطه بازگشتی را به این صورت تعریف می کنیم :

  • اگر کاراکتر j ام t در y نباشد:  
  • اگر کاراکتر j ام t در y باشد و 

توجه کنید که در صورت وجود کاراکتر j ام t در y این کاراکتر تنهای می تواند معادل آخرین کاراکتر x باشد (چرا ؟)

کد(C plus plus) :

http://codeforces.com/contest/169/submission/1419274

موافقین ۵ مخالفین ۱ ۹۱/۰۱/۰۸
محمد مهدی جهان آرا

برنامه ریزی پویا

Codeforecs

نظرات  (۰)

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

ارسال نظر

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