zoukankan      html  css  js  c++  java
  • 生物基元问题

    生物基元问题

    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
    ****************************************************************/
    
  • 相关阅读:
    git分支管理之创建与合并分支
    git分支管理
    git远程仓库之从远程库克隆
    git远程仓库之添加远程库
    git远程仓库
    Git时光机穿梭之删除文件
    Git时光机穿梭之撤销修改
    Git时光机穿梭之管理修改
    Git时光机穿梭之工作区和暂存区
    Git时光机穿梭之版本回退
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11867910.html
Copyright © 2011-2022 走看看