1. 程式人生 > >【洛谷】【搜索+字符串】

【洛谷】【搜索+字符串】

www div HA sum ++ con %d stream dfs

題目:[...] (https://www.luogu.org/problemnew/show/P1019)

[Code:]

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int n, len[21];
int ans, used[21];
string s[21];
char head;

inline int pipei(string a, string b) {
    int lena = a.size(), lenb = b.size();
    int
ret = 0, l = min(lena, lenb); for(int i=0; i<l; ++i) { if(a.substr(lena-i-1, i+1) == b.substr(0, i+1)) return i+1; } return 0; } void dfs(int sum, string now) { ans = max(ans, sum); for(int i=1; i<=n; ++i) { if(used[i] < 2) { int k = pipei(now, s[i]); if
(k == 0 || k == len[i]) continue; ++used[i]; int l = now.size(); string tmp = now; for(int j=k; j<len[i]; ++j) { now += s[i][j]; } dfs(sum + len[i] - k, now); --used[i]; now = tmp; } } } int
main() { cin >> n; for(int i=1; i<=n; ++i) { cin >> s[i]; len[i] = s[i].size(); } cin >> head; for(int i=1; i<=n; ++i) { if(s[i][0] == head) { used[i] = 1; dfs(len[i], s[i]); used[i] = 0; } } printf("%d", ans); return 0; }

【洛谷】【搜索+字符串】