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)到 ...
随机推荐
- 做阉割版Salesforce难成伟大的TOB企业
https://www.lieyunwang.com/archives/446227 猎云注:当前中国市场环境下,有没有可能诞生一批SaaS级企业服务公司?东方富海合伙人陈利伟用三个方面基础性问题解答 ...
- Uva11762 Race to 1——有向无环图&&记忆化搜索
题意 给出一个整数 $N$,每次可以在不超过 $N$ 的素数中等概率随机选择一个 $P$,如果 $P$ 是 $N$ 的约数,则把 $N$ 变成 $N/P$,否则 $N$ 不变.问平均情况下需要多少次随 ...
- 微信小程序——<scroll-view>滚动到最底部
最近在做个直播间,有个这样的需要,就是进入到页面,<scroll-view>需要滚动到最底部,并且发送消息之后自动的滚动到底部. 开始想着计算里面内容的高度,然后通过设置 scroll-t ...
- 学到了林海峰,武沛齐讲的Day50 django
http请求中产生两个核心对象: http请求:HttpRequest对象 http响应:HttpResponse对象 所在位置:django.http 5/8结束
- win7虚拟机安装
https://blog.csdn.net/qq_16503045/article/details/81904986 iso下载地址 https://msdn.itellyou.cn/
- dinoql 支持自定义resovler了
dinoql 当前版本0.4.0 支持自定义reovler 了,使用也比较简单 环境准备 初始化 yarn init -y 添加依赖 yarn add dinoql graphql-tag packa ...
- ERP study
- SpringBoot导入Excel数据到MySQL数据库
package com.example.example1.Controller; import com.example.example1.Entity.User; import com.example ...
- 原创:搜索排序算法之自定义性能优良的PriorityQueue(与Python的heap比较)
前几天写了一篇关于"史上对BM25模型最全面最深刻解读以及lucene排序深入解读"的博客,lucene最后排序用到的思想是"从海量数据中寻找topK"的时间空 ...
- sublime 添加到右键菜单