词链(link)

词链(link)

题目描述

给定一个仅包含小写字母的英文单词表,其中每个单词最多包含50个字母。
如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链。例如下面的单词组成了上个词链:
i
int
integer
而下面的单词不组成词链:
integer
intern
请在给定的单词表中取出一些词,组成最长的词链。最长的词链就是包含单词数最多的词链。
数据保证给定的单词表中,单词互不相同。

输入

第1行一个整数(n≤10000),表示单词表中单词数;
接下来n行,每行一个单词。

输出

一个整数,表示最长词链长度。

样例输入

5
i
integer
internet
intern
int

样例输出

4

分析:类似于最长上升子序列;代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#include <ext/rope>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define vi vector<int>
#define pii pair<int,int>
#define mod 1000000007
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
const int maxn=1e4+10;
const int dis[][2]={0,1,-1,0,0,-1,1,0};
using namespace std;
using namespace __gnu_cxx;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
int n,m;
string a[maxn],p;
int dp[maxn],ma;
int main()
{
    int i,j,k,t;
    scanf("%d",&n);
    rep(i,0,n-1)cin>>a[i];
    sort(a,a+n);
    rep(i,0,n-1)
    {
        for(j=i-1;j>=0;j--)
        {
            if(a[i].length()>=a[j].length()&&a[i].substr(0,a[j].length())==a[j]){dp[i]=max(dp[i],dp[j]+1),ma=max(ma,dp[i]);break;}
        }
    }
    printf("%d\n",ma+1);
    //system("pause");
    return 0;
}
    
时间: 2024-10-19 16:21:45

词链(link)的相关文章

RQNOJ 429 词链:单调栈

题目链接:https://www.rqnoj.cn/problem/429 题意: 如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链. 如:i,int,integer. 给你一堆按字典序排好的字符串,问你最长的词链有多长(词链中的字符串个数). 题解: 单调栈. 找出单调性: 对于栈内的元素,从栈底到栈顶为单调,形成一个词链. 找出答案: 扫一遍给出的字符串,栈的最大高度即为答案. 维护单调性: 因为字符串按字典序排好,已经达到了是单调性

P1127 词链

题目描述 如果单词X的末字母与单词Y的首字母相同,则X与Y可以相连成X.Y.(注意:X.Y之间是英文的句号".").例如,单词dog与单词gopher,则dog与gopher可以相连成dog.gopher. 另外还有一些例子: dog.gopher gopher.rat rat.tiger aloha.aloha arachnid.dog 连接成的词可以与其他单词相连,组成更长的词链,例如: aloha.arachnid.dog.gopher.rat.tiger 注意到,".

js获取元素的外链样式

一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可document.getElementById("div1").style.width来获取或设置.但是如果样式是在外链link中的或者是页面的非行内样式,就获取不到了. 在标准浏览器中可以通过window.getComputedStyll(obj,null)[property]来获取外链样

清北学堂学习总结 day1 数据结构 练习

1.二叉搜索树 STL set直接做就可以了 2.树状数组+差分数列: codevs 1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下来n行n个整数,再接下来一个正整数Q,表示操作的个数. 接下来Q行每行若干个整数.如果第一个数是1,后接3个正

我给女朋友讲编程CSS系列(1) –添加CSS样式的3种方式及样式表的优先权

如果说,原生态就是美,那么,我们就没有必要穿衣打扮. 网页是什么? 说白了,网页就是一堆[html标签]有序的搭配,让[CSS属性值]整整容,请[Javascript语言]处理一下事件. 一个人的整容效果,很大程度上取决于Ta本人,也就是原材料,对网页来说,原材料就是html标签,因此设计优秀的html标签结构十分重要. 整容医生的作用也至关重要,割双眼皮,整容医生的基本功,不同医生割出来的效果不同. 作为一个网页设计师,我们是不是应该追求完美,尽最大努力,让网页漂亮一些. 我知道,我们往往自称

day 1——字典树练习

cojs 173. 词链 ★☆   输入文件:link.in   输出文件:link.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述]给定一个仅包含小写字母的英文单词表,其中每个单词最多包含 50 个字母. 如果一张由一个词或多个词组成的表中,每个单词(除了最后一个)都是排在它后面的单词的前缀,则称此表为一个词链.例如下面的单词组成了一个词链: i int integer 而下面的单词不组成词链: integer intern 请在给定的单词表中取出一些词,组成最长

(转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对 C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃 C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能

apple-touch-icon,shortcut icon和icon的区别

apple-touch-icon 可以了解到这是一个类似网站favicon的图标文件,用来在iphone和ipod上创建快捷键时使用. 这个文件应当是png格式,57x57像素大小,放在网站根目录之下.如果准备的文件不是57x57的话,它会自己缩放的. 在页面的head部分,用下面的格式表示. <link rel="apple-touch-icon" href="/apple-touch-icon.png"/> 语句一:<link rel=&quo

linux驱动current,引用当前进程,及task_struct(转)

尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义, 它产生一个指针指向结构 task_struct, 在 <Linux/sched.h> 定义. current 指针指向当前在运行的进程. 在一个系统调用执行期间, 例如 open 或者 read, 当前进程是发出调用的进程. 内核代码可以通过使用 current 来使用进程特定的信息, 如果它