Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]
思路容易想,卡空间和时间就吐了
用链式前向星压缩空间,用getchar()一位一位读加快读入
#include <iostream>
#include <cstdio>
#include <stack>
#include <sstream>
#include <limits.h>
#include <vector>
#include <map>
#include <cstring>
#include <deque>
#include <cmath>
#include <iomanip>
#include <queue>
#include <algorithm>
#include <set>
#define Mid ((l + r) >> 1)
#define Lson rt << 1, l , mid
#define Rson rt << 1|1, mid + 1, r
#define ms(a,al) memset(a,al,sizeof(a))
#define log2(a) log(a)/log(2)
#define _for(i,a,b) for( int i = (a); i < (b); ++i)
#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)
#define for_(i,a,b) for( int i = (a); i >= (b); -- i)
#define rep_(i,a,b) for( int i = (a); i > (b); -- i)
#define lowbit(x) ((-x) & x)
#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define INF 0x3f3f3f3f
#define LLF 0x3f3f3f3f3f3f3f3f
#define hash Hash
#define next Next
#define pb push_back
#define f first
#define s second
using namespace std;
const int N = 5e6 + 10, MOD = 998244353;
const long double eps = 1e-5;
const int p = 2333;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
typedef pair<double,double> PDD;
template<typename T> void read(T &x)
{x = 0;char ch = getchar();ll f = 1;while(!isdigit(ch)){if(ch == '-')f*=-1;ch=getchar();}while(isdigit(ch)){x = x*10+ch-48;ch=getchar();}x*=f;
}
template<typename T, typename... Args> void read(T &first, Args& ... args)
{read(first);read(args...);
}
int n;
char str[N];
ll ans;
int idx, var; //顶点和内存池
int cnt[N];
// 插入一个字符串
struct node {char val;int to;int next;
}e[N];
int head[N];void insert()
{int p = 0;char C = getchar();for (int i = 0; C != '\n'; i ++, C = getchar()){int v = -1;for(int i = head[p]; ~i; i = e[i].next)if(e[i].val == C) {v = e[i].to;p = v;break;}if(v == -1) {e[idx] = {C,++ var/*开新节点*/,head[p]};head[p] = idx ++;//开新边p = var;}cnt[p] ++;ans = max((ll)cnt[p] * (i + 1),ans);}}int main()
{ms(head,-1);read(n);for(int i = 0; i < n; ++ i)insert();printf("%lld\n",ans);return 0;
}
Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]相关推荐
- Djisktra + 链式前向星建图 + PriorityQueue堆优化【附Java代码模板题解】
Djisktra堆优化(链式前向星)
- HDU1535 Invitation Cards(链式前向星+堆优化dijkstra)[C++]
目录 题目及翻译 题面 输入 输出 输入样例 输出样例 题目思路 注意事项 AC代码 C++ 题目及翻译 题面 In the age of television, not many people at ...
- 前向星和链式前向星(详解+模板)
前向星和链式前向星 参考博客:深度理解链式前向星 什么是前向星 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的 ...
- 链式前向星模板 建图+dfs+bfs+dijkstra
边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...
- AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)
题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...
- P1155 双栈排序(二分图的染色判断+链式前向星)
P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...
- 图的存储 邻接矩阵+邻接表+链式前向星
图的存储 - 邻接矩阵 在树的问题中,邻接矩阵是空间.时间的极大浪费. 假设树的结点个数为 N = 100000. 建立邻接矩阵需要空间为 1e5*1e5 但是由于只有 N - 1 条边,所以在邻接矩 ...
- 图的储存方式,链式前向星最简单实现方式 (边集数组)
对于图来说,储存方式无非就是邻接矩阵.邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的.看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更 ...
- 蓝桥集训之BFS、DFS和链式前向星
配套视频 https://www.bilibili.com/video/BV1RD4y1F7Fq 一.建图基础 前言 图一般定义为二元集: 由顶点集与边集构成. 或者更抽象的说,由一个集合(顶点),和 ...
最新文章
- HTML添加上传图片并进行预览
- 【NCEPU】徐韬:街景字符编码识别比赛
- java request 封装对象_java通过request自动封装复杂对象
- MFC- OnIdle空闲处理
- ARM Cortex M3指令集
- java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的。
- 马未都说收藏:陶瓷篇(8、9)元青花、永宣青花
- 京东联盟API - 万能转链接口 - 高效转链接口 - 接口定制
- Linux_常用的磁盘列阵(RAID)
- python代码编辑器
- 什么是抽象类?抽象类有什么特点?举例说明抽象类及其成员的定义方法。
- samba服务器搭建详细配置
- G20错误修改---转载
- 销售订单_跨公司销售
- arping指令即其参数对应的功能
- 看了几百个小时资料,为什么你只能是“伪架构师”?| 聊聊这件事
- DRM系列(4)之drmModePageFlip
- css代码实现各式各样的icon小图标
- 开关灯问题(python)实现
- 微分中值定理之罗尔中值定理
热门文章
- python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
- idea配置Maven的坑
- 线程和进程有什么区别?
- 机器视觉检测中的图像预处理方法
- Transformer 超详细解读,一图胜千言
- 双十二自动刷淘宝能量,这个脚本你值得拥有
- go的打包依赖构建工具-dep
- Faiss教程:索引(2)
- 一个简单express+jade+mysql+bootstrap+nodejs的demo
- 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec...