首页 > 其他分享 >luogu P9753题解

luogu P9753题解

时间:2023-12-11 18:28:56浏览次数:41  
标签:ok P9753 int 题解 wei long luogu 复杂度 size

题意描述

有一个字符串, 请你求出有多少个字串可以经过若干次, 使它变成空串

其中每次操作可以从字符串中删除两个相邻的相同字符,操作后剩余字符串会拼接在一起。

## 思路1

可以枚举左端点, 再枚举右端点, 一边枚举一边判断是否合法

时间复杂度 $O(n^2)$

空间复杂度 $O(n)$

## 思路2

我们可以看出, 如果一个字串可以删除, 那么这一段可以完全抵消, 令这个字串的左端点为 $l$, 右端点为 $r$, 所以从 $1$ ~ $l - 1$ 和从 $1$ ~ $r$的栈是相同的(因为从 $l$ ~ $r$ 这一段的都被抵消了)可以用前缀和维护从 $1$ ~ $i$的栈出现数量, 再哈希统计答案

时间复杂度 $O(n \log n)$

空间复杂度 $O(n \log n)$

代码

```cpp
#include<bits/stdc++.h>

using namespace std;

const int N = 2e6 + 5;

unordered_map<unsigned long long, int>t;

unsigned long long wei[N];

string o;

int n;
unsigned long long ok;
char c;
long long ans;
int tot;

int main(){
cin >> n;
wei[0] = 1;
for(int i = 1; i <= 1000000; i++){
wei[i] = wei[i - 1] * 13331;
}
ok = 0;
t[0] = 1;
for(int i = 1; i <= n; ++i){
cin >> c;
if(o.size() && o[o.size() - 1] == c){
ok -= (o[o.size() - 1] - 'a' + 1) * wei[int(o.size())];
o.pop_back();
}
else{
o += c;
ok += (c - 'a' + 1) * wei[int(o.size())];
}
t[ok]++;
ans += t[ok] - 1;
}
cout << ans;
return 0;
}

标签:ok,P9753,int,题解,wei,long,luogu,复杂度,size
From: https://www.cnblogs.com/liuyichen0401/p/17895073.html

相关文章

  • ARC166 B Make Multiples 题解
    LinkARC166BMakeMultiplesQuestion给出\(N\)个整数,\(A_1...A_N\),还有三个数\(a,b,c\)我们可以给\(A_i\)加上\(1\)需要使得数组\(A\)满足,存在一个数是\(a\)的倍数,一个数是\(b\)的倍数,一个数是\(c\)的倍数求最少的操作次数Solution考虑对于每个数的操作......
  • CF1901 D Yet Another Monster Fight 题解
    LinkCF1901DYetAnotherMonsterFightQuestion现在给你一堆怪物,你拥有法术(一个法术可以连续攻击这n个所有怪物),你可以选择任意一个怪物作为法术的第一个攻击目标(伤害为\(x\)),然后除了第一个攻击目标可以任意,其他攻击目标只能为曾经攻击目标的相邻怪物。然后伤害依次递减,\(x......
  • CF1764H Doremy's Paint 2 题解
    题目链接先断环成链,由于对于多组询问不好一起处理,我们先考虑单组询问的处理方式。一个很暴力的想法是每次模拟题目要求的操作并且最后数颜色,我们这是在通过下标进行操作最后再数颜色,而很多对于下标的操作都是不必要的,考虑直接枚举颜色进行判定。对于每种颜色,它对于最后答案有贡......
  • UVA1658 Admiral 题解
    LinkUVA1658AdmiralQuestion给出一个图,找出\(1\simn\)的两条,使得路径和最小Solution可以把点拆开,把除了\(1\)和\(n\)的点\(i\),拆成\(i\)和\(i'\),\(i\)到\(i'\)连一条费用为\(0\),容量为\(1\)的边,如果原来有一条边\(u-v\),那么就建立一条\(u'->v\),费......
  • P2341 受欢迎的牛 G 题解
    LinkP2341[USACO03FALL/HAOI2006]受欢迎的牛GQuestion牛栏中有\(N\)头奶牛,和一些\(M\)对爱慕关系,A->B表示A爱慕B。每个奶牛都喜欢自己,被所有奶牛喜欢就是一头明星奶牛,求明星奶牛的数量Solution考虑一个强连通分量里面的奶牛是相互爱慕的,先根据强连通分量缩点,缩......
  • 题解 QOJ1173【Knowledge Is...】 / accoders::NOI 5681【interval】
    https://qoj.ac/contest/537/problem/1173problem给定\(n\leq10^6\)个区间,你需要求出能够最多选出多少对区间,使得两个区间不交(区间为闭区间)。要求一个区间最多属于一对选出的区间。solution这是一般图匹配问题的特殊情况,所以放弃dp,考虑贪心、网络流、匹配等。按照左端点......
  • P5048 [Ynoi2019 模拟赛] 题解
    题意给定\(n\)个数,有\(m\)个询问,每个询问给定\(l\)和\(r\),求出区间\(l\)到\(r\)中的最小众数出现次数,强制在线。数据范围:\(n\le500000\),空间限制:\(62.5MB\)。思路这道题的弱化版是蒲公英,这道题加强的地方在于数据范围。正常的分块求区间众数的空间复杂度是\(O(n......
  • CF1842E Tenzing and Triangle 题解
    题意不多赘述。思路如果两个所选的三角形有重合部分的话,那么这种情况肯定是不会出现的。因为如果把这两个三角形合成一个大三角形的话,不仅覆盖面积会增大,而且花费的代价还不会多。于是我们可以想到用dp来解决,设\(dp_{i}\)表示删完横坐标为\(0\)到\(i\)中的点的最小代价......
  • [ABC304Ex] Constrained Topological Sort 题解
    题意给定一张有向图\(G\),有\(n\)个点和\(m\)条边,问是否存在一种拓扑序的排列\(P\)使得\(l_{i}\lep_{i}\ler_{i}\)。思路首先对于一条边\(u\tov\),如果限制满足\(r_{v}\ler_{u}\)或者\(l_{v}\gel_{u}\)的话,那么这个限制其实是不完全正确的。因为最终的序列......
  • 【题解】AtCoder abc322_f Random Update Query
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_f容易发现,对于一个位置$i$,$A_i$的最终值是由对$i$的最后一次赋值操作决定的;因此,将所有操作按时间顺序倒过来考虑,则由第$j$次操作决定$A_i$最终值的概率为"在第$(j+1)$~$m$次操作中没有修改过$i$的概率"与"第......