题目链接:Codeforces 466C Number of Ways
题目大意:给定一个序列,要求分成三段,每段和相同,问有多少种拆分方法。
解题思路:将所有前缀和为sum3的位置全部记录下来,然后在逐个计算后缀和,然后对应如果和为sum3,计算该位置前有多少个前缀和sum3。
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 5 * 1e5 + 5;
int n, arr[maxn];
ll s = 0;
vector<int> vec;
ll solve () {
if (s % 3)
return 0;
s /= 3;
ll p = 0, ret = 0;
for (int i = 0; i < n; i++) {
p += arr[i];
if (p == s)
vec.push_back(i);
}
p = 0;
for (int i = n-1; i >= 0; i--) {
p += arr[i];
if (p == s)
ret += lower_bound(vec.begin(), vec.end(), i-1) - vec.begin();
}
return ret;
}
int main () {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
s += arr[i];
}
printf("%lld\n", solve());
return 0;
}
分享到:
相关推荐
Codeforces 题库 101-200 共~500题 codeforces.com版权所有。 程序可提交至该网站评测。
Codeforces 题库 001-100 共~500题 codeforces.com版权所有。 程序可提交至该网站评测。
codeforces编程网站预测分数插件
使用于Google Chrome的Codeforces Enhancer 1.1.2插件安装包。 版本:codeforces enhancer 1.1.2 使用浏览器:Google Chrome
Some of the Codeforces problems codes
解决问题的方法教育Codeforces回合101 - 2/6 常规托架顺序-接受红色和蓝色...添加糖果-接受1447B-号码盒-接受 Codeforces回合#674(Div.3) 虚拟参与1426A-楼层号-接受1426B-对称矩阵-接受1426C-增加并复制-已接受1426
暴枚最长桌脚的长度$l$,然后长度比$l$长的桌脚全部都要砍掉长度比$l$短的桌脚选择代价前$k$小的砍掉用线段树维护;示例程序 :typedef long l
Codeforces 185A - Plant 全测试点49个
codeforces 19 E Fairy 一道比较难的题目的解题报告 推荐阅读
Codeforces global round 10 codes
Codeforces round 678 division 2 codes
Codeforces - 1107B. Digital root & 1107C. Brutality(规律 & 贪心)Codeforces - 1107B.
Codeforces round 678 D2_Codeforces_源码
打codeforces的神器
一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip
codeforces-js Codeforces JS
lucifer1004大佬的博客cf上分攻略故里大佬的githubcf思维题刷题数:44- (1421)codeforces 676 div2 A,B done
使用 C# + WPF 开发 --- 还在发愁打了那么多场比赛都没有进入首页么? 还在为了前 5 的 hacker 名额阅读千份代码么? 是的,你没有看错! 这是一个 Edu & Div.3 轮 Open hacking 错误代码自动查找器!...
Codeforces Round #723 (Div. 2).md
Codeforces 题库 201-294 共~500题 codeforces.com版权所有。 程序可提交至该网站评测。