csu 1987: 绚丽的手链
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: 绚丽的手链的更多相关文章
- csu 1812: 三角形和矩形 凸包
传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...
- CSU 1503 点到圆弧的距离(2014湖南省程序设计竞赛A题)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1503 解题报告:分两种情况就可以了,第一种是那个点跟圆心的连线在那段扇形的圆弧范围内,这 ...
- CSU 1120 病毒(DP)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 解题报告:dp,用一个串去更新另一个串,递推方程是: if(b[i] > a ...
- CSU 1116 Kingdoms(枚举最小生成树)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 解题报告:一个国家有n个城市,有m条路可以修,修每条路要一定的金币,现在这个国家只 ...
- CSU 1113 Updating a Dictionary(map容器应用)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...
- CSU 1333 Funny Car Racing (最短路)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333 解题报告:一个图里面有n个点和m条单向边,注意是单向边,然后每条路开a秒关闭b秒 ...
- CSU 1337 搞笑版费马大定理(2013湖南省程序设计竞赛J题)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1337 解题报告:虽然x和y的范围都是10^8,但是如果a 是大于1000的话,那么a^3 ...
- CSU 1328 近似回文词(2013湖南省程序设计竞赛A题)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 解题报告:中文题题意就不说了.还好数据不大,只有1000,枚举回文串的中心位置,然 ...
- 三分 --- CSU 1548: Design road
Design road Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1548 Mean: 目的:从(0,0)到 ...
随机推荐
- NPM——npm|cnpm如何升级
前言 手动更新了node.js版本后,想要升级下npm的版本 步骤 其实无论npm还是cnpm升级的命令都是一样的,除了需要指定包名. 升级npm $ npm install -g npm 查看npm ...
- 1.zookeeper是干什么的?
Zookeeper是Hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...
- np.mean()函数
1. 数组的操作: import numpy as np a = np.array([[1, 2], [3, 4]]) print(a) print(type(a)) print(np.mean(a) ...
- NOI2018游记【一年后的回忆】
今天是2019年9月6日,我坐在大学的宿舍里,同样敲着键盘,在一年前充满回忆与汗水的博客上,又一次地回忆往事. 那是2018年的7月,我停了三个月的课,攥着一张thusc的安慰约,放手在OI的生涯最后 ...
- Logistic Regression Algorithm
逻辑回归算法LR. 简介 逻辑回归是机器学习从统计学领域借鉴的另一种技术.它是二进制分类问题的首选方法(有两个类值的问题). Logistic回归就像线性回归,目标是找到权重每个输入变量的系数值. ...
- learning scala someElements
The Scala collections library provides specialised implementations for Sets of fewer than 5 values ( ...
- presto docker简单试用
starburstdata 团队提供了一个docker 版本的presto,其中已经内置了几个connectors tpch tpcds memory backhole jmx system pull ...
- C# 读取Excel 单元格是日期格式
原文地址:https://www.cnblogs.com/liu-xia/p/5230768.html DateTime.FromOADate(double.Parse(range.Value2.To ...
- GoCN每日新闻(2019-10-20)
GoCN每日新闻(2019-10-20) slakc是如何构建共享频道的 https://slack.engineering/how-slack-built-shared-channels-8d42c ...
- VS2017 Asp.Net调式闪退处理