【NOI2016】优秀的拆分(95分)
来源:互联网 发布:女人下没有用知专卖店 编辑:程序博客网 时间:2024/05/17 17:16
uoj 传送门
题目大意:给出一串字符串,求它的子串中形如AABB的方案个数。
90% len<=2000 ,O(n^2) 的做法可以过。
100% len<=30000, 蒟蒻不会啦。
O(n^2)的做法:
枚举中间点,求出两边形如AA的个数,相乘加入答案中。
#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring> #define LL long long#define MOD 1000000009#define base 163#define M 30009using namespace std;int T,len;LL Hash[M],P[M],ans;char a[2009];LL get_hash(int L,int R){ return (Hash[R]-Hash[L-1]*P[R-L+1]%MOD+MOD)%MOD;}int main(){ P[0]=1; for(int i=1;i<=2001;i++) P[i]=P[i-1]*base%MOD; scanf("%d",&T); while(T--) { //gets(a+1); cin>>a+1; len=strlen(a+1); for(int i=1;i<=len;i++) Hash[i]=(Hash[i-1]*base+a[i]-'a')%MOD; ans=0; for(int i=2;i<=len-1;i++) { int L=0,R=0; for(int j=i/2;j;j--) { if(get_hash(i-j+1,i)==get_hash(i-2*j+1,i-j)) L++; } for(int j=(len-i)/2;j;j--) { if(get_hash(i+1,i+j)==get_hash(i+j+1,i+2*j)) R++; } ans+=L*R; } printf("%lld\n",ans); } return 0;}
阅读全文
1 0
- 【NOI2016】优秀的拆分(95分)
- UOJ #219 [NOI2016 D1T1] 优秀的拆分 [95分]
- 【NOI2016】优秀的拆分
- [UOJ P219][NOI2016]优秀的拆分[95]
- bzoj4650: [Noi2016]优秀的拆分
- 4650: [Noi2016]优秀的拆分
- 【后缀数组】[NOI2016]优秀的拆分
- bzoj 4650: [Noi2016]优秀的拆分
- BZOJ 4650([Noi2016]优秀的拆分-SA)
- NOI2016 优秀的拆分 后缀数组
- NOI2016 优秀的拆分 后缀数组
- NOI2016优秀的拆分 后缀数组
- [BZOJ4650][NOI2016]优秀的拆分-后缀数组
- [后缀数组] BZOJ4650: [Noi2016] 优秀的拆分
- Noi2016 D1 T1 优秀的拆分 90做法
- BZOJ 4650: [Noi2016]优秀的拆分 哈希+分块
- [BZOJ4650][NOI2016]优秀的拆分 各数据点解法
- [后缀数组 枚举 字符串分段] BZOJ 4650 [Noi2016]优秀的拆分
- Max Sequence (DP)
- ActiveMQ高可用集群安装配置
- 多GPU Tensorflow
- 【Caffe】caffemodel的大小计算(转载)
- LINUX内核面试题摘选
- 【NOI2016】优秀的拆分(95分)
- 【怎样写代码】确保对象的唯一性 -- 单例模式(六):扩展案例
- TabLayout公用fragment
- java数据结构与算法-再哈希法哈希表
- 关于手机的思考
- hadoop安装前的准备
- SOCKET 网络通信
- 反卷积结构及原理
- 《Java开发实战1200例》(第2卷)学习笔记—TCP套接字