• 生物基元问题


    生物基元问题

    Description

    一个生物体的结构可以用“基元”的序列表示,一个“基元"用一些英文字符串表示。对于一个基元集合P,可以将字符串S看作由n个基元P1,P2,…,Pn依次连接而成的。问题是给定一个字符串S和一个基元集合P,使S的前缀可由P中的基元组成。求这个前缀的最大长度。基元的个数最大为20,长度最大为20,字符中的长度最大为500000.例如基元集合为{A,AB,BBC,CA },字符串为ABACABBCAACCB,则最大长度为10,其具体组成为ABACABBCAA 2214433311

    Input

    第一行为字符串S,第二行为一个整数m,表示基元数 以下m行,每行一个基元

    Output

    只有一个整数,表示字符串S中能得到的最大前缀长度。

    Sample Input

    ABACABBCAACCB
    4
    A
    AB
    BBC
    CA
    

    Sample Output

    10
    

    HINT

    Source

    #include <bits/stdc++.h>
    using namespace std;
    char s[500011], a[30][30];
    int n, slen, len[30];
    bool f[500011];
    bool check(int pos, int t) {
        for (int i = 1; i <= len[t]; i ++) {
            if (s[pos + i - 1] != a[t][i]) {
                return 0;
            }
        }
        return 1;
    }
    int main() {
        scanf("%s", s + 1);
        slen = strlen(s + 1);
        cin >> n;
        for (int i = 1; i <= n; i ++) {
            scanf("%s", a[i] + 1);
            len[i] = strlen(a[i] + 1);
        }
        memset(f, 0, sizeof(f));
        f[0] = 1;
        for (int i = 0; i <= slen; i ++) {
            if (f[i] == 1) {
                for (int j = 1; j <= n; j ++) {
                    if (check(i + 1, j) == 1) {
                        f[i + len[j]] = 1;
                    }
                }
            }
        }
        for (int i = slen; i >= 0; i --) {
            if (f[i] == 1) {
                cout << i << endl;
                return 0;
            }
        }
        return 0;
    }
         
    /**************************************************************
        Problem: 1613
        User: LJA001162
        Language: C++
        Result: 正确
        Time:0 ms
        Memory:2512 kb
    ****************************************************************/
    
  • 相关阅读:
    1908-逆序对(归并板子)
    4939-Agent2-洛谷
    1020-导弹拦截-洛谷
    5239-回忆京都-洛谷3月赛gg祭
    5238-整数校验器-洛谷3月赛gg祭
    最大子矩阵
    最长上升子序列(LIS)
    Zk单机多实例部署
    Zk集群部署
    zk单点部署
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11867910.html
Copyright © 2020-2023  润新知