博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ] 2251: [2010Beijing Wc]外星联络
阅读量:6344 次
发布时间:2019-06-22

本文共 1440 字,大约阅读时间需要 4 分钟。

题意:求一个01串中每个出现次数大于1的子串的个数

注意到\(n\leq3000\),因此可以暴力在Trie上插入所有的后缀,统计end节点的个数

正确的姿势是枚举一个左端点\(l\),然后一路插入\([l,n]\),而不是枚举两个端点,那样是\(O(n^3)\)

字典序?中序遍历输出即可

#include
#include
#include
using namespace std;inline int rd(){ int ret=0,f=1;char c; while(c=getchar(),!isdigit(c))f=c=='-'?-1:1; while(isdigit(c))ret=ret*10+c-'0',c=getchar(); return ret*f;}#define pc putchar#define space() pc(' ')#define nextline() pc('\n')void pot(int x){if(!x)return;pot(x/10);pc('0'+x%10);}void out(int x){if(!x)pc('0');if(x<0)pc('-'),x=-x;pot(x);}const int MOD = 1e9+7;int add(int x,int y){return x+y>MOD?x+y-MOD:x+y;}int sub(int x,int y){return x-y<0?x-y+MOD:x-y;}int mul(int x,int y){return (long long)(1ll*x*y)%MOD;}void Add(int &x,int y){x=add(x,y);}void Sub(int &x,int y){x=sub(x,y);}void Mul(int &x,int y){x=mul(x,y);}const int SQRN=3005;const int MAXN = SQRN*SQRN;int ch[MAXN*2][2],ed[MAXN*2],tot,n;char s[SQRN];inline int newnode(){return ++tot;}void insert(int l){ int cur=0; for(int i=l;i<=n;i++){ int c=s[i]-'0'; if(!ch[cur][c]) ch[cur][c]=newnode(); cur=ch[cur][c];ed[cur]++; } }void dfs(int cur){ if(ed[cur]>1) out(ed[cur]),nextline(); if(ch[cur][0]) dfs(ch[cur][0]); if(ch[cur][1]) dfs(ch[cur][1]);}int main(){ n=rd(); scanf("%s",s+1); for(int i=1;i<=n;i++)insert(i); dfs(0); return 0;}

转载于:https://www.cnblogs.com/ghostcai/p/9879088.html

你可能感兴趣的文章
关于网络上java,php和.net的“口角之争“的一点想法 !
查看>>
python 第二周(第十三天) 我的python成长记 一个月搞定python数据挖掘!(21) -正则表达式re...
查看>>
[POI2011]SEJ-Strongbox
查看>>
20文件
查看>>
Android开发Intent应用概述
查看>>
【Go】并发编程
查看>>
VMware虚拟化NSX-Manager命令行更改admin用户密码
查看>>
悦纳自己
查看>>
python字符串函数
查看>>
ORM框架Hibernate (四)MyEclipse Hibernate Tool 逆向生成实体类
查看>>
js中substr与substring的区别
查看>>
去掉iphone连接电脑时会出现的弹出窗口
查看>>
【python】-- web开发之HTML
查看>>
vs2015 去除 git 源代码 绑定
查看>>
解决firefox的button按钮文字不能垂直居中
查看>>
网络协议端口号详解
查看>>
大话数据结构读后感——第一章
查看>>
各种排序
查看>>
ts 格式化日期输出
查看>>
Optional
查看>>