1987: 绚丽的手链

Submit Page   Summary   Time Limit: 6 Sec     Memory Limit: 512 Mb     Submitted: 13     Solved: 2


Description

小X的妹妹马上就要过生日了,作为哥哥,小X打算买一些手链送给妹妹。

采购完礼物回到家的小X惊奇的发现:每条手链虽然只由两种颜色的珠子串成,但是它们有一个神奇的效果,那就是当多条手链同时放在一起时,会散发出绚丽夺目的光芒。光芒的绚丽程度有强有弱,这取决于手链的最长公共前缀的长度和手链数目的乘积。例如000,001,0011三串手链放在一起会发出绚丽程度为6的光芒。

显然如果将所有手链都送给妹妹,效果未必最好,因此他决定从中挑选一些送给妹妹,使得能够达到最绚丽的效果。你能帮助他吗?

Input

第一行一个整数 T (≤ 20) 表示数据组数。

每组数据第一行一个整数 n(≤ 50000) 代表字符串的数量。接下来N行,每行为一个仅由0,1组成的字符串代表小X购买的手链,手链的最大长度为200。

Output

对于每组数据输出一行, 表示小X经过挑选后送给妹妹的手链所能产生的最大绚丽程度。

Sample Input

4
4
0000
0001
10101
010
2
01010010101010101010
11010010101010101010
3
010101010101000010001010
010101010101000010001000
010101010101000010001010
5
01010101010100001010010010100101
01010101010100001010011010101010
00001010101010110101
0001010101011010101
00010101010101001

Sample Output

6
20
66
44

Hint

Source

2017年暑期集训校队选拔

Author

徐戍

题解:

这个题目是真的不好做    心累

6次超时   还有几次其他的错误

我的第一想法就是   构建字典树  节点记录下着是几个字符串的公共子串   (这个不难)  然后就是一次遍历字典树   求出答案   结果超时

然后  我发现建树之后其实不用去遍历了    我们在建树的时候   就可以得到答案    结果还是超时

下面的超时的那个代码    各位大佬谁会优化的   告诉一下我怎么优化   0.0    (后面有AC代码)

 #include <cstdio>
#include <time.h>
#include <cmath>
#include <map>
#include <stdlib.h>
#include <cstring>
using namespace std;
char s[];
int ans;
struct Trie
{
int num;
struct Trie *nxt[];
Trie()
{
num=;
for(int i=; i<; i++)
{
nxt[i]=NULL;
}
}
}; void Trie_Inser(Trie *p,char s[])
{
int i=;
Trie *q=p;
while(s[i])
{
int nx=s[i]-'';
if(q->nxt[nx]==NULL)
{
q->nxt[nx]=new Trie;
}
i++;
q=q->nxt[nx];
q->num++;
ans=max(ans,(q->num)*i);
}
}
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
ans=;
Trie *p=new Trie;
scanf("%d",&m);
getchar();
while(m--)
{
gets(s);
Trie_Inser(p,s);
} printf("%d\n",ans); }
return ;
}

在我觉得动态字典树的做法没有救了之后    我尝试了一下动态字典树的    说的简单点就是使用数组去模拟

 #include <iostream>
#include <cstring>
#include <cstdio> using namespace std;
int pos,ans;
struct node
{
int num;
int child[];
}tree[]; int add()
{
pos++;
tree[pos].num=;
for(int i=;i<;i++)
{
tree[pos].child[i]=-;
}
return pos;
} int inser(char* str)
{
int post=;
int tmp=;
int len=strlen(str);
for(int i=;i<len;i++)
{
int m=str[i]-'';
if(tree[post].child[m]==-)
{
if(tmp==)
tmp=i+;
tree[post].child[m]=add();
} post=tree[post].child[m];
tree[post].num++;
ans=max(ans,tree[post].num*(i+));
}
if(!tmp)
tmp=len;
return tmp;
} char arr[];
int main()
{
int T;
scanf("%d",&T);
for(int t=;t<=T;t++)
{
int n;
pos=;
memset(tree[].child,-,sizeof(tree[].child));
scanf("%d",&n);
ans=;
for(int i=;i<n;i++)
{
scanf("%s",&arr);
int k=inser(arr);
}
cout<<ans<<endl;
}
return ;
}

csu 1987: 绚丽的手链的更多相关文章

  1. csu 1812: 三角形和矩形 凸包

    传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...

  2. CSU 1503 点到圆弧的距离(2014湖南省程序设计竞赛A题)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1503 解题报告:分两种情况就可以了,第一种是那个点跟圆心的连线在那段扇形的圆弧范围内,这 ...

  3. CSU 1120 病毒(DP)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 解题报告:dp,用一个串去更新另一个串,递推方程是: if(b[i] > a ...

  4. CSU 1116 Kingdoms(枚举最小生成树)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 解题报告:一个国家有n个城市,有m条路可以修,修每条路要一定的金币,现在这个国家只 ...

  5. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  6. CSU 1333 Funny Car Racing (最短路)

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333 解题报告:一个图里面有n个点和m条单向边,注意是单向边,然后每条路开a秒关闭b秒 ...

  7. CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 解题报告:虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3 ...

  8. CSU 1328 近似回文词(2013湖南省程序设计竞赛A题)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 解题报告:中文题题意就不说了.还好数据不大,只有1000,枚举回文串的中心位置,然 ...

  9. 三分 --- CSU 1548: Design road

    Design road Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1548 Mean: 目的:从(0,0)到 ...

随机推荐

  1. Hibernate的悲观锁和乐观锁

    前一篇博客我们从数据库角度分析,锁可以分为三种,分别为共享锁,独占锁和更新锁.我们从程序的角度来看锁可以分为两种类型,悲观锁和乐观锁,Hibernate提供对这两种锁 的支持,我们来了解一下Hiber ...

  2. python中的glob模块的使用

    最近常常用到glob模块,这里做一个简单小结: 用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:”*”, “?”, “[]”.”*”匹配0个或多 ...

  3. AtCoder Beginner Contest 129 解题报告

    传送门 写了四个题就跑去打球了.第五题应该能肝出来的. A - Airplane #include <bits/stdc++.h> using namespace std; inline ...

  4. 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问

    有时在我们的实际开发中我们希望直接访问k8s service 暴露的服务,以及pod的ip 解决方法,实际上很多 nodeport ingress port-forword 实际上我们还有一种方法:正 ...

  5. 原生 ajax 请求

    ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用.本质是在 HTTP 协议的基础上以异步的方式与服务器进行通信. 异 ...

  6. 【区间DP】加分二叉树

    https://www.luogu.org/problemnew/show/P1040#sub 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为 ...

  7. 这里是DDOSvoid的blog

    由于博主已经退役,博客现由 @一扶苏一 代为维护. DDOSvoid 在生前退役前写下了大量的 blog 存在本地,现在由他的弟子 一扶苏一 整理编纂成为题单慢慢上传,是为<论语>< ...

  8. GoCN每日新闻(2019-10-18)

    GoCN每日新闻(2019-10-18) 在Go1.13使用Errors https://blog.golang.org/go1.13-errors Go的扁平化应用结构 https://www.ca ...

  9. intellij ide 集成cmder

    1.环境变量配置: https://github.com/cmderdev/cmder/wiki/Setting-up-Environment-Variables 2.intellijide的配置:h ...

  10. MySql 三大知识点——索引、锁、事

    作者:莫那鲁道原文:http://thinkinjava.cn/2019/03/16/2019-03-16-mysql/ 1. 索引 索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的内容. ...