題目鏈接: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;
}