پاسخ سوال تطابق رشته + کوئرا
در این نوشته تمرین “تطابق رشته” که در وبسایت کوئرا موجود می باشد را برای شما کاربران عزیز حل کرده ایم.
در مورد سایت کوئرا بیشتر بخوانید…
تمرین تطابق رشته کوئرا + سی پلاس پلاس
گر به رفتار استفهای کدکاپ ۳ در طول مسابقه دقت کردهباشید، درمییابید که همه استفا عاشق مصطفی هستند.
در کدکاپ ۳ به هر کس ژتونی برای نهار داده شده که روی آن، رشتهای از حروف کوچک انگلیسی نوشته شدهاست.
محمود که یکی از استفهای زحمتکش مسابقات است عقیده دارد از بین همه استفهای عاشق مصطفی، مصطفی خودش عاشق استفی است که رشته نوشته شده روی ژتونش بیشترین درجه تطابق و طول تطابق با رشته خودش را داشته باشد. از این رو او میخواهد درجه تطابق و طول تطابق رشته خودش را با رشته مصطفی حساب کند.
درجه تطابق و طول تطابق دو رشته به شکل زیر به دست میآید:
رشته مصطفی را با و رشته محمود را با نشان میدهیم، طول هر دوی این رشتهها برابر است. فرض کنید یک گراف دو بخشی با 2n رأس داریم که رأسهای بخش اول متناظر با کاراکترهای رشتهی و رأسهای بخش دوم متناظر با کاراکترهای رشتهی است. به ازای هر دو اندیس و () که کاراکتر i-ام از رشتهی s و کاراکتر j-ام از رشتهی t با یکدیگر برابر باشد یک یال بین رأسهای متناظر این دو کاراکتر در گراف میگذاریم. طول تطابق رشتههای s و را برابر تعداد یالهای بزرگترین تطابق در این گراف، و درجه تطابق رشتههای s و t را برابر تعداد بزرگترین تطابقهای این گراف مینامیم.
یک تطابق در گراف یک زیرمجموعه از یالهای آن گراف است که هیچ دو یالی از آن در رأسی مشترک نیستند.
دو تطابق را متفاوت فرض میکنیم اگر مجموعهی یالهای آنها متفاوت باشد.
حال محمود با دادن رشته مصطفی و رشته خودش به شما، از شما میخواهد که طول تطابق و باقیمانده درجه تطابق رشته خودش با رشته مصطفی به 9^10 + 7 را برای او بدست آورید.
ورودی سوال تطابق رشته
در خط اول s، که رشته مصطفی است، و در خط دوم رشته t، که رشته محمود است، به شما داده میشود. دقت کنید که هر دو رشته فقط از حروف کوچک انگلیسی تشکیل شده است.
خروجی سوال تطابق رشته
در یک خط دو عدد جدا شده با فاصله از هم چاپ کنید که عدد اول طول تطابق دو رشته و عدد دوم باقیمانده درجه تطابق دو رشته به 9^10 + 7 است.
حل سوال تطابق رشته (به زبان برنامه نویسی سی پلاس پلاس)
#include <bits/stdc++.h> using namespace std; #define ll long long const int mod = 1e9+7; int main() { string s, t; cin >> s >> t; int mini, maxi; ll len = 0, cnt = 1; for(char a='a'; a<='z'; a++) { mini = min(count(s.begin(), s.end(), a), count(t.begin(), t.end(), a)); maxi = max(count(s.begin(), s.end(), a), count(t.begin(), t.end(), a)); if(mini == 0) continue; len += mini; for(int i=maxi; i>maxi-mini; i--) cnt = (cnt*i) % mod; } cout << len << " " << cnt << endl; return 0; }
منبع سوال : وبسایت کوئرا
اگر روش حل بهتری برای “تمرین تطابق رشته” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.
اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.
موفق باشید.
ارسال پاسخ