当前位置: 首页 > article >正文

C. Good Subarrays

time limit per test

2 seconds

memory limit per test

256 megabytes

You are given an array a1,a2,…,ana1,a2,…,an consisting of integers from 00 to 99. A subarray al,al+1,al+2,…,ar−1,aral,al+1,al+2,…,ar−1,ar is good if the sum of elements of this subarray is equal to the length of this subarray (∑i=lrai=r−l+1∑i=lrai=r−l+1).

For example, if a=[1,2,0]a=[1,2,0], then there are 33 good subarrays: a1…1=[1],a2…3=[2,0]a1…1=[1],a2…3=[2,0] and a1…3=[1,2,0]a1…3=[1,2,0].

Calculate the number of good subarrays of the array aa.

Input

The first line contains one integer tt (1≤t≤10001≤t≤1000) — the number of test cases.

The first line of each test case contains one integer nn (1≤n≤1051≤n≤105) — the length of the array aa.

The second line of each test case contains a string consisting of nn decimal digits, where the ii-th digit is equal to the value of aiai.

It is guaranteed that the sum of nn over all test cases does not exceed 105105.

Output

For each test case print one integer — the number of good subarrays of the array aa.

Example

Input

Copy

3
3
120
5
11011
6
600005

Output

Copy

3
6
1

Note

The first test case is considered in the statement.

In the second test case, there are 66 good subarrays: a1…1a1…1, a2…2a2…2, a1…2a1…2, a4…4a4…4, a5…5a5…5 and a4…5a4…5.

In the third test case there is only one good subarray: a2…6a2…6.

解题说明:此题是一道数列题,确保区间内每个元素的和为区间长度。因为区间和等于前缀和相减即sum[i]−sum[j−1]。所以由题意可以得到:sum[i]−sum[j−1]=i−j+1。移项后得:sum[i]−i=sum[j−1]−j+1。统计 sum[i]−i的个数即可。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string.h>
#include<map>
#include<queue>
#include<vector>
#include<set>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
const ll mm = 1e5 + 60;
ll s[mm], n, ans;
map<ll, ll>mp;int main()
{int t;cin >> t;while (t--){memset(s, 0, sizeof(s));ans = 0;mp.clear();mp[0] = 1;cin >> n;for (int i = 1; i <= n; i++){char c;cin >> c;s[i] = s[i - 1] + c - '0';ans += mp[s[i] - i]++;}cout << ans << endl;}return 0;
}

相关文章:

C. Good Subarrays

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array a1,a2,…,ana1,a2,…,an consisting of integers from 00 to 99. A subarray al,al1,al2,…,ar−1,aral,al1,al2,…,ar−1,ar is good if the sum of elements of this subarra…...

聊天室项目day4(redis实现验证码期限,实现redis连接池)

1.redis连接池操作和之前所学过的io_context连接池原理一样这里不多赘述&#xff0c;也是创建多个连接&#xff0c;使用时按顺序取出来。 2.知识补充redisConnect()函数建立与 Redis 服务器的非阻塞网络连接&#xff0c;成功返回 redisContext*&#xff08;连接上下文指针&…...

提交至git

通过 Pull Request 提交代码 如果你无法直接推送到 master 分支&#xff08;例如&#xff0c;因为分支保护或权限限制&#xff09;&#xff0c;通常的做法是将代码推送到一个新分支&#xff0c;并通过 Pull Request&#xff08;或 Merge Request&#xff09;提交代码&#xff1…...

0x06.Redis 中常见的数据类型有哪些?

回答重点 Redis 常见的数据结构主要有五种,这五种类型分别为:String(字符串)、List(列表)、Hash、Set(集合)、Zset(有序集合,也叫sorted set)。 String 字符串是Redis中最基本的数据类型,可以存储任何类型的数据,包括文本、数字和二进制数据。它的最大长度为512MB。 使…...

如何查看自己 Android App 的私有数据?从 `adb backup` 到数据提取全过程

&#x1f6e0;️ 如何查看自己 Android App 的私有数据&#xff1f;从 adb backup 到数据提取全过程 &#x1f4cc; 前言&#xff1a;作为一名 Android 开发者&#xff0c;我常常想知道自己写的 App 在用户设备上的数据存储结构是怎样的&#xff0c;比如有没有数据写入成功、有…...

提权实战!

就是提升权限&#xff0c;当我们拿到一个shell权限较低&#xff0c;当满足MySQL提权的要求时&#xff0c;就可以进行这个提权。 MySQL数据库提权&#xff08;Privilege Escalation&#xff09;是指攻击者通过技术手段&#xff0c;从低权限的数据库用户提升到更高权限&#xff…...

Vue使用el-table给每一行数据上面增加一行自定义合并行

// template <template><el-table:data"flattenedData":span-method"objectSpanMethod"borderclass"custom-header-table"style"width: 100%"ref"myTable":height"60vh"><!-- 订单详情列 -->&l…...

ChromeOS 135 版本更新

ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命&#xff0c;ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization&#xff0c;可提供更多充电优化选项&#xff0c…...

国内协作机器手焊接领域领军人物分析

国内焊接协作机器手领域的专家涵盖学术界与产业界,他们在核心技术研发、行业标准制定及重大工程应用中发挥关键作用。以下从技术方向、行业贡献、典型案例三个维度展开分析: 一、学术界领军人物:理论创新与技术突破 1. 吴林(哈尔滨工业大学) 学术地位:中国焊接学会名誉…...

javaSE.Lambda表达式

如果一个接口中有且只有一个待实现的抽象方法&#xff0c;那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式&#xff1a; &#xff08;【参数类型 参数名称&#xff0c;】...&#xff09; -> {代码语句&#xff0c; 包括返回值} 只有一行花括号{}可以省略。…...

【随身wifi】青龙面板保姆级教程

0.操作前必看 本教程基于Debian系统&#xff0c;从Docker环境。面板安装&#xff0c;到最后拉取脚本的使用。 可以拉库跑狗东京豆&#xff0c;elm红包等等&#xff0c;也可以跑写自己写的脚本&#xff0c;自行探索 重要的号别搞&#xff0c;容易黑号&#xff0c;黑号自己负责…...

Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?

这几天各国关税问题导致世界动荡不安&#xff0c;如今GitHub又无法正常访问&#xff0c;是不是Google到时候也无法正常使用了。...

深入解析 Android 图形系统:Canvas、Skia、OpenGL 与 SurfaceFlinger 的协作

在 Android 应用开发中&#xff0c;流畅的 UI 渲染是用户体验的核心。但你是否好奇&#xff0c;一个简单的 View 是如何从代码中的 onDraw() 方法一步步变成屏幕上的像素的&#xff1f;本文将从底层图形系统的视角&#xff0c;解析 Android 中 Canvas、Skia、OpenGL ES 和 Surf…...

4月13日星期日早报简报微语报早读

4月13日星期日&#xff0c;农历三月十六&#xff0c;早报#微语早读。 1、北京处置倒伏树木843棵&#xff0c;已全部处置完毕&#xff1b; 2、山西大同“订婚强奸案”本月16日二审宣判&#xff0c;一审男方被判3年刑&#xff1b; 3、今年我国快递业务量已突破500亿件&#xf…...

动态路由, RIP路由协议,RIPv1,RIPv2

动态路由 1、回顾 路由&#xff1a;从源主机到目标主机的过程 源主机发送数据给目标主机&#xff0c;源主机会查看自身的路由信息 如果目标主机是自己同网段&#xff0c;源主机查看的是直连路由 如果目标主机和自己不同网段&#xff0c;源主机查看的是静态路由、动态路由、默…...

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据&#xff0c;旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理&#xff0c;活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类&#xff0c;进而计算每个志愿者在…...

212、【图论】字符串接龙(Python)

题目描述 题目链接&#xff1a;110. 字符串接龙 代码实现 import collectionsn int(input()) beginStr, endStr input().split() strList [input() for _ in range(n)]deque collections.deque() # 使用队列遍历结点 deque.append([beginStr, 1]) # 存储当前字符串和遍…...

车载以太网-TLS

文章目录 车载以太网与TLS的技术背景核心定位车载以太网TLS的技术架构车载TLS的核心安全机制TLS报文结构详解TLS工作机制密钥交换与计算流程标题完整握手流程(1-RTT)数据传输加密流程车载TLS的独特优化策略车载TLS的安全威胁相关标准车载以太网TLS(Transport Layer Security…...

大模型面经 | 手撕多头注意力机制(Multi-Head Attention)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

02_位掩码逻辑及Java示例

文章目录 一、位掩码核心逻辑二、Java示例&#xff1a;权限管理‌三、关键点解析‌四、优缺点分析‌五、适用场景 位掩码&#xff08;Bitmask&#xff09;是一种利用二进制位进行状态管理的技术&#xff0c;通过位运算高效处理多个布尔标志。 一、位掩码核心逻辑 ‌基本概念‌…...

【UE5】RTS游戏的框选功能+行军线效果实现

目录 效果 步骤 一、项目准备 二、框选NPC并移动到指定地点 三、框选效果 四、行军线效果 效果 步骤 一、项目准备 1. 新建一个俯视角游戏工程 2. 新建一个pawn、玩家控制器和游戏模式,这里分别命名为“MyPawn”、“MyController”和“MyGameMode” 3. 打开“MyGam…...

GO语言-数据类型

文章目录 变量定义1. 整数类型2. 浮点类型3. 字符类型4. 布尔类型5. 字符串类型5.1 字符串的本质5.2 常用字符串处理函数(strings包)5.3 修改字符串的方式 6. 数据默认值7. 类型转换 变量定义 代码如下&#xff1a; package mainimport "fmt"var i1 1000 var i2 i…...

低资源需求的大模型训练项目---3、综合对比与选型建议

综合对比与选型建议 1. Qwen2.5-0.5B 适用性分析&#xff1a; • 优势&#xff1a; • 工业级全流程支持&#xff1a;阿里云提供了完整的预训练、微调、强化学习&#xff08;RLHF&#xff09;代码和文档&#xff0c;支持从数据处理到模型部署的全链路实践。 • 性能与场景适配…...

设计模式 四、行为设计模式(2)

五、状态模式 1、概述 状态设计模式是一种行为型设计模式&#xff0c;它允许对象在其内部状态发生时改变其行为&#xff0c;这种模式可以消除大量的条件语句&#xff0c;并将每个状态的行为封装到单独的类中。 状态模式的主要组成部分如下&#xff1a; 1&#xff09;上…...

FEA 仿真助力高速连接器设计中的信号完整性

各行各业高速信号软件和硬件的快速发展&#xff0c;带来了更高的频率和带宽。因此&#xff0c;对连接器组件的整体性能要求也更加严格。同时&#xff0c;器件和封装形式、互连以及系统内其他设备的小型化也带来了额外的设计挑战。所有这些都对信号传输完整性产生重大影响。 高速…...

yum的基本操作和vim指令

在我们的手机端或者Windows上下载软件&#xff0c;可以在相应的应用商店或者官网进行下载&#xff0c;这样对于用户来说十分的方便和便捷。而在Linux上&#xff0c;也有类似的安装方式&#xff0c;我们来一一了解一下。 Linux安装软件的3种方法 源代码安装 在Linux下安装软件…...

synchronize 或者lock 锁常见的使用场景

在 Java 多线程编程中&#xff0c;synchronized 和 Lock&#xff08;如 ReentrantLock&#xff09;是两种常见的线程同步机制。以下是它们的核心区别和典型使用场景&#xff0c;结合代码示例说明&#xff1a; 一、synchronized 的常见场景 1. 简单的临界区保护 public class …...

Qt触摸屏隐藏鼠标指针

Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 Chapter1 Qt触摸屏隐藏鼠标指针 使用Qt开发的屏幕软件HMI不需要显示鼠标&#xff0c;qt设置&#xff0c;可以在只启动HMI的时候隐藏光标&#xff0c;退出时再显示。 1.如果只希望在某个 widget 中不显示鼠标指针&#xf…...

LangGraph——Agent AI的持久化状态

LangGraph 内置了一个持久化层&#xff0c;通过检查点(checkpointer)机制实现。当你使用检查点器编译图时&#xff0c;它会在每个超级步骤(super-step)自动保存图状态的检查点。这些检查点被存储在一个线程(thread)中&#xff0c;可在图执行后随时访问。由于线程允许在执行后访…...

【双指针】专题:LeetCode 1089题解——复写零

复写零 一、题目链接二、题目三、算法原理1、先找到最后一个要复写的数——双指针算法1.5、处理一下边界情况2、“从后向前”完成复写操作 四、编写代码五、时间复杂度和空间复杂度 一、题目链接 复写零 二、题目 三、算法原理 解法&#xff1a;双指针算法 先根据“异地”操…...