Codeforces 314B

題目鏈接:http://codeforces.com/problemset/problem/314/B

若一個字符串A刪掉一些字符後能得到另一個字符串B,我們稱B能從A中獲得。

問從一個重複b次的字符串a中能最多獲得幾個重複d次的字符串c


先處理出一個從字符串c任意一個點開始能從一個字符串a中獲得的滿足要求的最長長度。

然後就可以求出可以獲取的字符串的最長長度,然後除以d*len(c)就是答案。

CF上的代碼真的很巧妙。


#include<bits/stdc++.h>
using namespace std;
char a[105], c[105];
int b, d, t[105]; //t數組表示從字符串c的i位置開始能夠獲得滿足要求的字符的最長長度(可以循環到C字符串開頭)
int main(){
    cin >> b >> d >> a >> c;
    int l = strlen(c);
    for (int i = 0; c[i]; i++){
        int &k = t[i];
        for (int j = 0; a[j]; j++) if(a[j] == c[(i+k)%l]) k++;
    }
    int ans = 0;
    for (int i = 1; i <= b; i++) ans += t[ans%l];
    cout << ans/l/d << endl;
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章