zoukankan      html  css  js  c++  java
  • 【洛谷】【搜索+字符串】

    题目:[...] (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;
    }
    
  • 相关阅读:
    bash编程2
    bash简介1
    grep文本处理工具
    用户的环境变量
    用户,组,权限
    yum与rmp
    逻辑卷管理
    磁盘配额
    磁盘创建
    创建计划任务
  • 原文地址:https://www.cnblogs.com/devilk-sjj/p/9221434.html
Copyright © 2011-2022 走看看