您当前的位置: 首页 >  ar

对方正在debug

暂无认证

  • 4浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Good Subarrays(前缀和)

对方正在debug 发布时间:2020-08-16 13:15:55 ,浏览量:4

题目 题意:给定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             
关注
打赏
1664895754
查看更多评论
0.0573s