usaco2.3.1 Longest Prefix

【USACO2.3.1】Longest Prefix最长前缀 IOI‘96 无 阅读详情

一 原题

Longest Prefix
IOI'96

The structure of some biological objects is represented by the sequence of their constituents, where each part is denoted by an uppercase letter. Biologists are interested in decomposing a long sequence into shorter sequences called primitives.

We say that a sequence S can be composed from a given set of primitives P if there is a some sequence of (possibly repeated) primitives from the set whose concatenation equals S. Not necessarily all primitives need be present. For instance the sequence ABABACABAABcan be composed from the set of primitives

	   {A, AB, BA, CA, BBC}

The first K characters of S are the prefix of S with length K. Write a program which accepts as input a set of primitives and a sequence of constituents and then computes the length of the longest prefix that can be composed from primitives.

PROGRAM NAME: prefix

INPUT FORMAT

First, the input file contains the list (length 1..200) of primitives (length 1..10) expressed as a series of space-separated strings of upper-case characters on one or more lines. The list of primitives is terminated by a line that contains nothing more than a period (`.'). No primitive appears twice in the list. Then, the input file contains a sequence S (length 1..200,000) expressed as one or more lines, none of which exceeds 76 letters in length. The "newlines" (line terminators) are not part of the string S.

SAMPLE INPUT (file prefix.in)

A AB BA CA BBC
.
ABABACABAABC

OUTPUT FORMAT

A single line containing an integer that is the length of the longest prefix that can be composed from the set P.

SAMPLE OUTPUT (file prefix.out)

11



二 分析

简单dp。坑爹的是目标串可能是以多行形式给出的。


三 代码

运行结果:
USER: Qi Shen [maxkibb3]
TASK: prefix
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 4572 KB]
   Test 2: TEST OK [0.000 secs, 4572 KB]
   Test 3: TEST OK [0.000 secs, 4572 KB]
   Test 4: TEST OK [0.000 secs, 4572 KB]
   Test 5: TEST OK [0.000 secs, 4572 KB]
   Test 6: TEST OK [0.130 secs, 4572 KB]

All tests OK.

Your program ('prefix') produced all correct answers! This is your submission #2 for this problem. Congratulations!

AC代码:
/*
ID:maxkibb3
LANG:C++
PROG:prefix
*/

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

int n, m;
char pri[205][15];
int len[205];
char target[200005];
bool dp[200005];

bool cmp(char *a, char *b, int len) {
    for(int i = 0; i < len; i++) {
        if(*a != *b) return false;
        a++; b++;
    }
    return true;
}

int main() {
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    while(true) {
        scanf("%s", pri[n]);
        len[n] = strlen(pri[n]);
        n++;
        char s = getchar();
        if(pri[n - 1][0] == '.') {
            n--;
            break;
        }
    }
    while(true) {
        if(scanf("%s", target + m) == -1) break;
        m = strlen(target);
    }
    //printf("%d\n", m);
    dp[0] = true;
    for(int i = 1; i <= m; i++) {
        if(dp[i]) continue;
        for(int j = 0; j < n; j++) {
            if(i < len[j]) continue;
            if(!cmp(target + i - len[j], pri[j], len[j])) continue;
            if(dp[i - len[j]]) dp[i] = true;
        }
    }
    for(int i = m; i >= 0; i--) {
        if(dp[i]) {
            printf("%d\n", i);
            break;
        }
    }
    return 0;
}



2.3.1 LONGEST PREFIX 最长前缀 解题思路: 1.简单动态规划。 2.纠结的边界处理,不建议采用dp[i]表示s前i个字符能否取得这种方法。用这种方法实现字符串储存的时候会比较麻烦。而且如果存储不对边界处理会非常麻烦……(最先我采用的是这种方法,结果WA 4次,多次处理还是有长度为0和长度为1的情况无法分辨,最终放弃) 阅读详情

相关推荐

JZOJ1266.【USACO题库】2.3.1 Longest Prefix最长前缀

题目描述在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的(称之为元素的)序列很感兴趣。如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。并不是所有的元素都必须出现。举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素:

路人黑的纸巾 1267

USACO2.3.1 The Longest Prefix (prefix)

简单的动态规划问题 bool数组dp[i]表示从s串的开头到第i位是否是一个符合题目要求的字符串 从头到尾扫一遍,枚举字符串数组str[]中存在的序列,临时变量okay表示此序列是否在原串中存在(按位来比较) 如果存在(即okay==1),dp转移方程 dp[i]= dp[i] | dp[i-ll] (ll位当前较短序列的长度,位运算|即表示这两个任何一个为真,则dp[i]赋值1) 倒序扫

xsy_victory的专栏 311

实战指南:用Python实现ONVIF WS-Discovery设备发现(附完整代码)

本文提供了一份详细的实战指南,介绍如何使用Python实现基于ONVIF标准的WS-Discovery设备发现协议。文章深入解析了协议原理、网络通信模型,并提供了完整的代码实现,帮助开发者快速构建智能安防和物联网应用中的设备自动发现工具,有效提升网络设备集成与管理的效率。

chair的专栏 1113

usaco题目分享——Longest Prefix

Longest PrefixIOI'96 The structure of some biological objects is represented by the sequence of their constituents, where each part is denoted by an uppercase letter. Biologists are interested in dec...

weixin_34310127的博客 169

从立创商城到Cadence:手把手教你实现封装格式的精准迁移

本文详细介绍了如何从立创商城获取元器件封装并精准迁移至Cadence Allegro的全流程。通过实战案例MAX31865ATP+T芯片,逐步解析Altium Designer格式转换、Cadence环境配置、封装导入验证等关键步骤,提供常见问题解决方案和效率提升技巧,帮助硬件工程师实现封装格式的高效迁移。

weixin_42519985的博客 215

使用TensorFlow搭建FNN(全连接神经网络)的基本步骤

提示:转载请注明出处,若本文无意侵犯到您的合法权益,请及时与作者联系。 目录 一、定义神经网络的输入输出 二、搭建神经网络 1、定义一个神经层中的权重 2、定义一个神经层中的阈值 3、定义一个神经层中的激活函数 4、组合神经层为神经网络 三、搭建损失函数和优化器 1、搭建损失函数 首先介绍第一个函数这其中用到的共同的函数为 2、定义优化器 四、训练神经网络 全连接神经网络的网络结构如下: 一、定义神经网络的输入输出 神经网络最擅长的工作就是模拟非线性函数,即一个复杂的高..

qq_41959920的博客 4070

usaco ★Longest Prefix 最长前缀

★Longest Prefix 最长前缀 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列 28 分解成较短的(称之为元素的)序列很感兴趣. 如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符) 组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素.并不是所有的元素都必须出现. 举个例子

silence401的博客 452

仪表数字图像识别的传统方法

虽然现有很多机器学习算法能够准确地识别数字,但是传统方法对于一些需要离线识别且计算能力有限的下位机设备来说,仍然有非常不错的效果。因此,今天就向大家讲解一下传统的数字识别方法在仪表读数方面的应用。 1.图像预处理技术 1.1 主要流程 图像处理依次需要进行图片预处理、字轮区域定位、字符分割和字符识别等过程。其中图像处理流程如下图所示。 2. 详细过程 2.1 灰度化 为了减小图像原始数据量,本系...

XYZ 4523

USACO 2.3.1 Longest Prefix 动态规划

Longest Prefix IOI'96 The structure of some biological objects is represented by the sequence of their constituents, where each part is denote by an uppercase letter. Biologists are interested in de

375

Apache NiFi新手必看:从零开始的数据流设计入门教程(含实战案例)

本文为Apache NiFi新手提供从零开始的数据流设计入门指南。通过实战案例,详细讲解了如何利用这一强大的数据采集工具,以可视化拖拽方式构建自动化数据流,实现从文件监控、内容处理到数据入库的全流程,并涵盖核心概念、环境搭建及生产环境调优要点。

weixin_29066781的博客 148

stata 工具变量法【计量经济系列(七)】

stata 工具变量法【计量经济系列(七)】 1. 内生性 2. 工具变量3. 2SLS (二阶段最小二乘法) 4. 弱工具变量5. 工具变量外生性的过度识别检验 6. 豪斯曼检验6.1 传统豪斯曼 6.2 杜宾-吴-豪斯曼检验(DWH)

侯小啾技术博客 2万+

USACO 2.3.1 Longest Prefix --- Trie

/* PROG: prefix ID : LANG: C++ */ #include #include #include #include #include #include #include using namespace std; struct Trie_Node { bool IsEnd; Trie_Node

个人技术博客 934

【华为OD技术面试手撕真题】3、小行星碰撞 | 手撕真题+思路参考+代码解析(C & C++ & Java & Python & JS)

小行星碰撞,本专栏更新每年华为OD机试的高频手撕代码题,每个题目都会使用五种语言进行解答(C & C++& Java & Python & JS),思路分析都非常详细, 实现最低的时间复杂度和高通过率,每个解题思路超过百字,内含各个编程语言的八股文面试题,欢迎大家订阅学习, 代码可以直接运行使用,全网限时最低价,持续更新

KJ.JK 8170

USACO 2.3.1 Longest Prefix

基本的动态规划吧。。想到方法了其实很简单(苯渣用暴搜做了2个小时,

Lostwinder的专栏 887

芒果YOLO11改进146:OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

OBB旋转检测头Head篇:即插即用|轻量化非对称多级压缩LOADH旋转检测头,原创改进适配YOLOv8高效检测头,检测头新颖改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 641

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

USACO 2.3.1 Longest Prefix 最长前缀

Longest Prefix IOI'96 The structure of some biological objects is represented by thesequence of their constituents, where each part is denote by anuppercase letter. Biologists are interested in deco

supersnow0622的专栏 3119

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

USACO - 2.3.1 - Longest Prefix

  原创文章转载请注明出处 摘要:动态规划 一. 题目翻译 1. 描述: 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣。 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S...

12312312341234 272

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

USACO 2.3.1The Longest Prefix

//// prefix.cpp : 定义控制台应用程序的入口点。 // /* ID: maiyuet1 PROG: prefix LANG: C++ */ //#include "stdafx.h" //一维DP可解 //下面的用字典树+BFS的代码,挂在第6组数据上。至今未解.

跟acm say goodbye 488

P1809【USACO2.3.1】Longest Prefix最长前缀 IOI'96

P1809【USACO2.3.1】Longest Prefix最长前缀 IOI’96 时间限制 : 15000 MS 空间限制 : 65536 KB 问题描述 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣。 如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组

Light.NKOI 1343

USACO 2.3.1 Longest Prefix dp

dp[i]=max(dp[i-1],能匹配成的单词的最长长度+i); View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 5 using namespace std; 6 7 int n,len,ar[205]; 8 char s[2...

diaopi1575的博客 122

Longest Prefix_usaco 2.3.1_dp

题目描述 Description在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序列分解成较短的序列(即元素)很感兴趣。如果一个集合 P 中的元素可以通过串联(元素可以重复使用,相当于 Pascal 中的 “+” 运算符)组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。元素不一定要全部出现(如下例中BBC就没有出现)。举个例子,序列 ABABAC

olahiuj的博客 661

USACO:2.3.1 Longest Prefix 最长前缀

USACO:2.3.1  Longest Prefix 最长前缀 一、题目描述 ★Longest Prefix 最长前缀 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的.生物学家对于把长的序列 28 分解成较短的(称之为元素的)序列很感兴趣. 如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符) 组成一个序列 S ,

蓝e的专栏 2201

USACO2.3.1 The Longest Prefix 题解

【算法】动态规划  【难度】★★☆☆☆ 这道题花费了很长时间(话说好像没有那道题时间短的)其实很显然是DP,状态转移方程也很容易想到(我是参考了最长公共子序列的思想)。设f[i]表示第i个是否在前缀中,则: {dp[i]=max{dp[j]+j-i}|i到j-1的字串是primitive。 i<j<=n} 如果没有i-j<=10最坏情况下就会超时!我在这纠结了...

aigai2119的博客 176
上一篇: usaco2.2.4 Party Lamps
下一篇: usaco2.3.4 Money Systems
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值