一道看似小学生的题,搞了我几个小时......

首先思路就有两种:

\(Ⅰ.找和为0的bad子串,再用n*(n+1)/2-bad子串得到答案\)

\(Ⅱ.找和不为0的good子串\)

如果你选择找bad子串就很麻烦了。(为什么呢?自己去试一试吧,不好说。)

这里找good子串,枚举每一个数作为区间的右端点。

\(那么往左找一个前缀和为0的左端点,答案贡献就是i-l+1\)

\(特殊的,对于第一个前缀和为0的要特判。\)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+9;
ll n,a[maxn],sumn,ans,L=0;
map<ll,ll>m;
int main()
{
cin>>n;
int flag=0;
m[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sumn+=a[i];
if(m[sumn]) L=max(L,m[sumn]+1);
else if(sumn==0)//特判,也要更新
L=max(L,(ll)1);
ans+=i-L;
m[sumn]=i;
}
cout<<ans;
}

最新文章

  1. 二分图水一波~~~~d带你飞
  2. google protobuf使用
  3. Base64编码原理与应用
  4. mod_rewrite模块详解
  5. BIEE Setup
  6. (转)passwordStrength 基于jquery的密码强度检测代码使用介绍
  7. eclipse中误删了servers文件
  8. PHP专业开发IDE——Zend Studio 10.5预览版发布
  9. mysql存储过程详细讲解及完整实例下载
  10. 通过javap终极理解++i和i++的区别
  11. 【原创】大叔问题定位分享(10)提交spark任务偶尔报错 org.apache.spark.SparkException: A master URL must be set in your configuration
  12. | 线段树-地平线horizon
  13. [dev][ipsec] netlink是什么
  14. C#对XML操作类
  15. HTTP协议中长连接与短连接的区别
  16. 认识ZTree
  17. 算法笔记(C++)
  18. 20155229 2016-2017-2 《Java程序设计》第九周学习总结
  19. HDU 4283 You Are the One(区间DP(最优出栈顺序))
  20. 【RabbitMQ】3、工作队列模式(work模式)

热门文章

  1. https的秘钥公钥以及之间的会话流程
  2. 路径跟踪 PathMeasure的简单使用
  3. Redis学习三:Redis高可用之哨兵模式
  4. windows/linux下如何更换Python的pip源
  5. G - Messy codeforces1262C
  6. C. Primes and Multiplication
  7. 引用传参与reference_wrapper
  8. Java 8 到 Java 14,改变了哪些你写代码的方式?
  9. Maven+JSP+Servlet+JDBC+Redis+Mysql实现的黑马旅游网
  10. sublime查看项目代码多少行