お手上げ。解説を読む。
KMP の接頭語関数の最後の要素と文字長の差を見るらしい
接頭辞関数って、最長の接頭辞の長さだよね・・・。
スパソから KMP を拝借してサブミット
vector<int> buildFail(const char *p)
{
int m = strlen(p);
vector<int> fail(m + 1);
int j = fail[0] = -1;
for (int i = 1; i <= m; ++i) {
while (j >= 0 && p[j] != p[i-1]) j = fail[j];
fail[i] = ++j;
}
return fail;
}
class RunningLetters {
public:
int newsLength(vector <string> R)
{
istringstream iss(accumulate(R.begin(), R.end(), string("")));
string s;
for (string t, u; iss >> t >> u; ) {
int n = atoi(t.c_str());
while (n--) s += u;
}
vector<int> v = buildFail(s.c_str());
return s.size() - v.back();
}
};