首页 > 其他分享 >洛谷题单指南-字符串-P1470 [USACO2.3] 最长前缀 Longest Prefix

洛谷题单指南-字符串-P1470 [USACO2.3] 最长前缀 Longest Prefix

时间:2024-10-15 10:34:45浏览次数:7  
标签:tmp 10 P1470 int 洛谷题 Prefix ans true first

原题链接:https://www.luogu.com.cn/problem/P1470

题意解读:求s最长前缀长度,使得可以拆解成p集合中的字符串

解题思路:

动态规划:

设s字符串下标从1开始,p集合用set<string>保存所有的元素

状态表示:设f[i]表示前i个字符s[0~i-1]是否能拆解成p中的元素

状态计算:对于j = i - 1开始往后倒推最多10个,如果f[j] = true并且j+1~i之间子串在p中,说明f[i] = true

初始化:f[0] = true

结果:最大的i

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 200005;
set<string> p;
string s;
bool f[N]; //f[i]表示前i个字符s[0~i-1]是否能拆解成p中的元素
int ans;

int main()
{
    string tmp;
    bool first = true;
    while(cin >> tmp)
    {
        if(tmp == ".") first = false;
        else
        {
            if(first) p.insert(tmp);
            else s += tmp;
        }
    }
    s = " " + s; //s从1开始,比正常长度增加了1
    f[0] = true;
    for(int i = 1; i < s.size(); i++)
    {
        for(int j = i - 1; j >= 0 && j >= i - 10; j--) //j从i-1往回最多退10个长度
        {
            string ss = s.substr(j + 1, i - j); //提取j+1~i之间的子串
            if(f[j] && p.count(ss) > 0) //如果f[j]为true且j+1~i之间子串在p中,说明前i个字符也符合要求
            {
                f[i] = true;
                ans = max(ans, i);
            }
        }
    }
    cout << ans;
    return 0;
}

 

标签:tmp,10,P1470,int,洛谷题,Prefix,ans,true,first
From: https://www.cnblogs.com/jcwy/p/18466934

相关文章

  • 洛谷题单指南-字符串-P5283 [十二省联考 2019] 异或粽子
    原题链接:https://www.luogu.com.cn/problem/P5283题意解读:n个整数,每次从从取l~r的数进行异或得到美味值,一共取k次,并计算这k个美味值之和的最大值。解题思路:1、如何O(1)的计算l~r数的异或,得到美味值可以借助前缀和思想,a[i]为第i个数,s[i]表示a[1]~a[i]每个数的异或值,要计算l~r的......
  • 洛谷题单指南-字符串-P2580 于是他错误的点名开始了
    原题链接:https://www.luogu.com.cn/problem/P2580题意解读:给n个字符串,再依次处理m个字符串,对于每个字符串,如果在前面n个字符串中输出OK,如果不在n个字符串中输出WRONG,如果在n个字符串中且不止一次查询过输出REPEAT。解题思路:1、set/map方法很简单直接,用set存下前n个字符串,map......
  • 洛谷题单指南-字符串-P1481 魔族密码
    原题链接:https://www.luogu.com.cn/problem/P1481题意解读:在n个字符串中找到最长的词链长度,定义字符串a、b、c可以形成词链,即a是b的前缀、b是c的前缀。解题思路:1、Trie树定义Trie树,也称前缀树、字典树,核心思想是将字符串拆解为单个字符,每个字符是树的一条边,节点是字符添加到树......
  • 洛谷题单指南-字符串-P4391 [BOI2009] Radio Transmission 无线传输
    原题链接:https://www.luogu.com.cn/problem/P4391题意解读:s1由若干个s2组成,求s2的最小长度,注意题目中说明s1是子串,但是不影响,可以认为s1是补全的由若干s2组成的字符串。解题思路:设s1由x个s2组成,如图所示设s1的Next数组从0开始,那么其最长相同前后缀长度为x-1个s2,即Next[s1.siz......
  • 洛谷题单指南-字符串-P3375 【模板】KMP
    原题链接:https://www.luogu.com.cn/problem/P3375题意解读:给定两个字符串:原串s,模式串p,求p在s中出现的所有位置,并输出p的长度为1~p.size()的子串的最长相同真前、后缀的长度。解题思路:KMP模版题,分两问,第一问通过KMP核心算法实现,第二问输出模式串的Next数组内容,接下来一一解读。......
  • 洛谷题单指南-分治与倍增-P6648 [CCC2019] Triangle: The Data Structure
    原题链接:https://www.luogu.com.cn/problem/P6648题意解读:在一个n行的数字三角形中,求所有边长为k的正三角形最大值之和。解题思路:1、枚举法枚举每一个边长为k的三角形,在其中求max,然后累加,n最多3000,时间复杂度是n^4,显然超时。2、倍增和ST思想此题非常类似于RMQ问题,也就是求区......
  • 洛谷题单指南-分治与倍增-P4155 [SCOI2015] 国旗计划
    原题链接:https://www.luogu.com.cn/problem/P4155题意解读:在m个点的环上,有n个区间,且各个区间之间没有包含关系,计算从每个区间开始,最少要多少个区间能覆盖环上所有m个点。解题思路:本质上是一个区间覆盖问题!1、破环成链由于题目中是一个环,对于环的问题,在区间DP中介绍过,经典处理......
  • 洛谷题单指南-分治与倍增-P3517 [POI2011] WYK-Plot
    原题链接:https://www.luogu.com.cn/problem/P3517题意解读:有n个连续的点p1,p2,...,pn,将这n个点分成不超过m堆,每堆点连续,每一堆都缩成一个点qi,要使得原来的点p1~ps距离qi的最大值最小(最相似),求这个相似度,并计算一共分成几堆,以及每堆缩到的点qi的坐标。解题思路:要使得若干点缩到一......
  • Prefix of Suffixes
    为什么求Z函数的过程又被称为【扩展KMP】呢?因为KMP算法是可以求出哪些后缀能与前缀完全匹配的,而Z函数则对于那些不能完全匹配的后缀,求出了最大的匹配长度现在你已经将问题转化为:在未被标记的后缀中,快速锁定当前新增的字符会使得哪些后缀失配“未被标记”太抽象了,回溯这个条件—......
  • 洛谷题单指南-分治与倍增-P3509 [POI2010] ZAB-Frog
    原题链接:https://www.luogu.com.cn/problem/P3509题意解读:n个点,每个点上有一只青蛙每次跳到距离自己第k近的点,m次之后跳到哪个点。解题思路:1、计算距离每个点第k近的点,存入ne[N]给定一个点i,距离i第k近的点一定在长度为k+1个点的窗口内,窗口包括i并且,第k近的点只能是左端点或者......