题目 题意:给定n个数,每个数大小为0-9,求这n个数,有多少个连续子区间,满足 ∑ i = l r = = ( r − l + 1 ) \sum_{i=l}^{r}==(r-l+1) ∑i=lr==(r−l+1)
思路:每个数都减去1,问题转化为,求有有多少个连续子区间,满足 ∑ i = l r = = 0 \sum_{i=l}^{r}==0 ∑i=lr==0,只需求出每个前缀和,如果 s u m i = 1 l = = s u m i = 1 r sum_{i=1}^l == sum_{i=1}^r sumi=1l==sumi=1r,说明 s u m i = l + 1 r = = 0 sum_{i=l+1}^{r} == 0 sumi=l+1r==0。因此,找出所有前缀和相同的个数x,那么这些前缀和贡献的区间数为 x ∗ ( x − 1 ) / 2 x*(x-1)/2 x∗(x−1)/2,注意,初始时, n u m 0 = 1 num_0=1 num0=1
#include
using namespace std;
#define ll long long
const int maxn = 100010;
int a[maxn];
char s[maxn];
int n;
unordered_map mp;
int main() {
int t;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
scanf("%s", s);
a[0] = 0;
mp.clear();
++mp[0];// 初始时,mp[0]=1
for(int i = 1;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?