题意

挺神仙的。首先$60$分暴力是比较好打的。

就是枚举左端点,看右端点能否是$0$

但是这样肯定是过不了的,假如我们只枚举一次,把得到的栈记录下来

那么若区间$(l, r)$是可行的,那么$s_{l - } = s_r$,证明自己yy一下吧。。

然后就是字符串hash乱搞了。。

#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<map>
#define LL long long
#define ull unsigned long long
using namespace std;
const int MAXN = 1e6 + , mod = 1e9 + ;
inline LL read() {
char c = getchar(); LL x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
char a[MAXN], s[MAXN];
int top = ;
ull base = , base2 = , po1[MAXN], po2[MAXN];
map<ull, LL> mp;
int main() {
scanf("%s", a + );
LL N = strlen(a + ), ans = ;
ull sum = , sum2 = ;
mp[] = ; po1[] = ; po2[] = ;
for(int i = ; i <= N; i++) po1[i] = po1[i - ] * base, po2[i] = po2[i - ] * base2;
for(int i = ; i <= N; i++) {
if(top && a[i] == s[top]) {
top--;
sum -= po1[top] * (a[i] - 'a' + );
sum2 -= po2[top] * (a[i] - 'a' + ); }
else {
sum += po1[top] * (a[i] - 'a' + );
sum2 += po2[top] * (a[i] - 'a' + ) ;
s[++top] = a[i];
}
ans += mp[(sum << ) + sum2];
mp[(sum << ) + sum2]++;
// printf("%d\n", ans);
}
printf("%lld", ans);
return ;
}
/*
abaababababbbbbaavbaaaabbbaaaabbabbbaabbabbb
*/

ZR#331. 【18 提高 3】括号序列(栈)的更多相关文章

  1. Catalan数,括号序列和栈

    全是入门的一些东西.基本全是从别处抄的. 栈: 支持单端插入删除的线性容器. 也就是说,仅允许在其一端加入一个新元素或删除一个元素. 允许操作的一端也叫栈顶,不允许操作的一端也叫栈底. 数个箱子相叠就 ...

  2. 栈+括号序列+暴力枚举——cf1248D1

    这个复杂度首先就想到是n3的复杂度,n2枚举换的位置,求值在花费n复杂度 判断一个序列有多少独立的括号子串时用栈处理一下即可 /* 枚举交换两个括号的位置,然后再对新的序列判一次即可 */ #incl ...

  3. 洛谷 P1241 括号序列(栈)

    嗯... 题目链接:https://www.luogu.org/problem/P1241 首先这道题是栈的入门题的加强版, 不仅要你判断这个括号序列是否合法,还要你将这个序列补充完整... 一开始是 ...

  4. lintcode: 有效的括号序列

    题目: 有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and']', 判定是否是有效的括号序列. 样例 括号必须依照 "() ...

  5. 洛谷 P1241 括号序列

    P1241 括号序列 题目描述 定义如下规则序列(字符串): 1.空序列是规则序列: 2.如果S是规则序列,那么(S)和[S]也是规则序列: 3.如果A和B都是规则序列,那么AB也是规则序列. 例如, ...

  6. UVA-673 括号匹配--栈

    如果是一个合法的序列,每对配对的括号的两个字符('(' 和 ')' 或者 '[' 和 ']')一定是相邻的,每次判断下该字符是否有配对即可. 如果配对,将左括号出栈即可.特别注意:空格也是合法的. A ...

  7. 有效的括号序列——算法面试刷题4(for google),考察stack

    给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 括号必须依照 "()" 顺序表示, & ...

  8. [leetcode]20. Valid Parentheses有效括号序列

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  9. 【BZOJ】1095: [ZJOI2007]Hide 捉迷藏 括号序列+线段树

    [题目]BZOJ 1095 [题意]给定n个黑白点的树,初始全为黑点,Q次操作翻转一个点的颜色,或询问最远的两个黑点的距离,\(n \leq 10^5,Q \leq 5*10^5\). [算法]括号序 ...

随机推荐

  1. ssh免密脚本

    #!/bin/sh if [ "$1"x = ""x ]; then echo "usage:/opt/bin/auto-ssh.sh user se ...

  2. 利用d3js绘出环形百分比环

    利用d3js绘出环形百分比环 (function() { var numberData = [{ value : 0.334, text : "33.4%", color : &q ...

  3. query builder 在线生成sql

    http://devtools.korzh.com/easyquery/javascript/docs/javascript-query-builder-php

  4. CodeForces 287B Pipeline (水题)

    B. Pipeline time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  5. 微信小程序开发之下拉菜单

    实现功能:点击维保人员,调出下拉菜单.选择子菜单时,显示右边的图标表示选中,并进行赋值并进行搜索筛选 Wxml: <view class="dtclass" bindtap= ...

  6. POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)

    Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...

  7. 程序员必备,C#各类项目、开源项目插件资料收藏

    一.AOP框架     Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面 ...

  8. Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)

    题意 在一个有向无环图上,两个人分别从一个点出发,两人轮流从当前点沿着某条边移动,要求经过的边权不小于上一轮对方经过的边权(ASCII码),如果一方不能移动,则判负.两人都采取最优策略,求两人分别从每 ...

  9. HDU5381【莫队算法+区间GCD特性】

    前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法.给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左 ...

  10. 数组常用API(1)

    数组常用API: 1. push 作用:数组尾部添加: 特点:可以添加一个或多个值: 返回值是数组最新的长度:会改变原数组: 示例: var arr = [10,20,30,40];          ...