CF466C 题解
Description
给定一个数组,求有多少组 \(i,j\) 将整个数组分成和相等的三个数组。
Solution
从左往右看一遍,记录每一个 \(i\) 使得 \(\sum_{k=1}^i a_k = \dfrac{S}{3}\)
从右往左看一遍,记录每一个 \(j\) 使得 \(\sum_{k=j}^n a_k = \dfrac{S}{3}\)
然后如果不出意外的话,每组 \(i,j\) 都是所求的数对,但要小心一点,就是 \(\{1,i\}\) 和 \(\{j,n\}\) 两个区间可能交叉!所以要筛选出不交叉的区间。
怎样筛选呢?我定义一个当前指针 \(cur\) ,我扫到每一个 \(i\) 时,将 \(cur\) 移到满足第 \(cur\) 个 \(j\) 的下标严格大于这个 \(i\) 的下标 \(+1\) ,则从 \(cur\) 及以后的所有 \(j\) 都能和当前 \(i\) 匹配。
为什么是下标 \(+1\) 呢?因为要给第二个区间留位置。
于是这个题目就做完了。记得开 \(long long\) !
Code
#define int ll
int n, a[500010], ansl[500010], ansr[500010], cntl, cntr, ans, s[500010];
signed main() {
int cur = 1;
read(n);
rep(i, 1, n) read(a[i]), s[i] = s[i - 1] + a[i];
if(s[n] % 3) {
print(0);
goto end;
}
rep(i, 1, n) if(s[i] == s[n] / 3) ansl[++cntl] = i;
rep(i, 1, n) if(s[n] - s[i - 1] == s[n] / 3) ansr[++cntr] = i;
rep(i, 1, cntl) {
while(ansr[cur] <= ansl[i] + 1 && cur <= cntr) ++cur;
ans += cntr - cur + 1;
}
print(ans);
end:
return 0;
}
CF466C 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- Linux安装及管理程序
一,常见的软件包封装类型 二.RPM包管理工具 三.查询RPM软件包信息 四.安装.升级.卸载RPM软件包 五.解决软件包依赖关系的方法 六.源代码编译 七.安装yum源仓库 一,常见的软件包封装类型 ...
- jquery鼠标移入移出事件
<!DOCTYPE html><html> <head> <meta http-equiv="Content-type" conte ...
- 12、创建mysql用户及赋予用户权限
1.通过help命令查看grant的用法: CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON db1.* ...
- My Idol:Beihai Zhang --<<The Three-body Problem>>
First 父:"要多想." 子:"想了之后呢?" 父:"北海,我只能告诉你在那以前要多想." 要多想--这场战争敌我力量对比过于悬殊,硬碰 ...
- Java核心基础第3篇-Java流程控制
Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...
- Nexus3配置yum私服
传送门==>>Nexus私服搭建教程 yum私服的优点: >节省公网带宽 >离线安装等 1. 创建Blob Stores 2. 创建仓库 2.1 创建yum代理(aliyun样 ...
- powerpoint2013去掉图片背景,转存png
1.打开powerpoint,点击菜单栏的[插入],如图: 2.点击『图像』,如图: 3.上传图片,如图: 4.上传的图片不是png的,现在需要去掉白色背景,保存成png,选中图片,点击菜单栏的『格式 ...
- Real DOM和 Virtual DOM 的区别?优缺点?
一.是什么 Real DOM,真实DOM, 意思为文档对象模型,是一个结构化文本的抽象,在页面渲染出的每一个结点都是一个真实DOM结构,如下: Virtual Dom,本质上是以 JavaScript ...
- 【算法学习笔记】概率与期望DP
本文学习自 Sengxian 学长的博客 之前也在CF上写了一些概率DP的题并做过总结 建议阅读完本文再去接着阅读这篇文章:Here 前言 单纯只用到概率的题并不是很多,从现有的 OI/ACM 比赛中 ...
- React 模块与组件
React 模块与组件 几个重要概念理解 1). 模块与组件 1. 模块: 理解: 向外提供特定功能的js程序, 一般就是一个js文件 为什么: js代码更多更复杂 作用: 复用js, 简化js的编写 ...