Codeforces - 466C 双指针
首先要判sum是否是3的整数倍
然后把符合条件的前缀和以及后缀和分别加入到静态vector中
最后扫一下j和k定位在哪然后求总长的差来更新答案
注意i j k至少隔1位,所以lower_bound是s1[i]+2
官方题解是O(n),不过没仔细看
这种解法最坏应该是常数较小的O(nlogn)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+11;
typedef long long ll;
int a[maxn],n;
ll sumL[maxn],sumR[maxn];
int s1[maxn],s2[maxn];
int main(){
while(scanf("%d",&n)!=EOF){
for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
sumL[0]=sumR[n+1]=0;
for(int i = 1; i <= n; i++) sumL[i]=sumL[i-1]+a[i];
for(int i = n; i >= 1; i--) sumR[i]=sumR[i+1]+a[i];
if(sumL[n]%3!=0){
printf("0\n");
continue;
}
int cnt1=0,cnt2=0;
ll ans=0;
for(int i = 1; i <= n; i++) if(sumL[i]==sumL[n]/3) s1[++cnt1]=i;
for(int i = 1; i <= n; i++) if(sumR[i]==sumL[n]/3) s2[++cnt2]=i;
for(int i = 1; i <= cnt1; i++){
int j = lower_bound(s2+1,s2+cnt2+1,s1[i]+2)-s2;
int d = cnt2-j+1;
ans+=d;
}
printf("%lld\n",ans);
}
return 0;
}
Codeforces - 466C 双指针的更多相关文章
- Card Game Again CodeForces - 818E (双指针)
大意: 给定序列, 求多少个区间积被k整除. 整除信息满足单调性, 显然双指针. 具体实现只需要考虑k的素数向量, 对每一维维护个指针即可. 这题看了下cf其他人的做法, 发现可以直接暴力, 若当前的 ...
- codeforces 466C. Number of Ways 解题报告
题目链接:http://codeforces.com/problemset/problem/466/C 题目意思:给出一个 n 个数的序列你,问通过将序列分成三段,使得每段的和都相等的分法有多少种. ...
- Codeforces - 466C - Number of Ways - 组合数学
https://codeforces.com/problemset/problem/466/C 要把数据分为均等的非空的三组,那么每次确定第二个分割点的时候把(除此之外的)第一个分割点的数目加上就可以 ...
- [Codeforces 466C] Number of Ways
[题目链接] https://codeforces.com/contest/466/problem/C [算法] 维护序列前缀和 , 枚举中间一段即可 , 详见代码 时间复杂度 : O(N) [代码] ...
- Skills CodeForces - 613B (双指针)
大意: $n$门课, 第$i$门分数$a_i$, 可以增加共$m$分, 求$cnt_{mx}*cf+mi*cm$的最大值 $cnt_{mx}$为满分的科目数, $mi$为最低分, $cf$, $cm$ ...
- codeforces 466C 计数 codeforces 483B 二分 容斥
题意:给你n个数,将他们分成连续的三个部分使得每个部分的和相同,求出分法的种数. 思路:用一个数组a[i]记下从第一个点到当前i点的总和.最后一个点是总和为sum的点,只需求出总和为1/3sum的点和 ...
- 【Codeforces 466C】Number of Ways
[链接] 我是链接,点我呀:) [题意] 让你把数组分成3个连续的部分 每个部分的和要一样 问你有多少种分法 [题解] 先处理出来num[i] 表示i..n这里面有多少个j 满足aft[j] = af ...
- codeforces 466c(暴力枚举)
题目链接 思路如下 *题意: 给定一个序列,问有多少种方案可以将此序列分割成3个序列元素和完全相同的子序列.(子序列不能为空).即问有多少个点对(i,j)满足a[1]+-+a[i-1]=a[i]+a[ ...
- Codeforces Round #544 (Div. 3) dp + 双指针
https://codeforces.com/contest/1133/problem/E 题意 给你n个数(n<=5000),你需要对其挑选并进行分组,总组数不能超过k(k<=5000) ...
随机推荐
- tortoisesvn 本项目的忽略项
https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-propertypage.html Adding and Editing Pr ...
- springboot启动过程(2)-run方法
1 springApplication的run run方法主要是用于创造spring容器ConfigurableApplicationContext对象. public ConfigurableApp ...
- 将一个string字符串变量分解为字符输出
我们定义一个string 变量str ,然后通过str.length()可以获得该字符串变量的长度: #include<iostream> #include<string> u ...
- 框架和事务 非常 有用 hibernate和mybatis区别
1****第一章 Hibernate与MyBatis 章 开发对比 开发学习 Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用 ...
- 20.LIBRARY_PATH和LD_LIBRARY_PATH环境变量的区别
转载:https://www.cnblogs.com/panfeng412/archive/2011/10/20/library_path-and-ld_library_path.html LIBRA ...
- Entity Framework Tutorial Basics(13):Database First
Database First development with Entity Framework: We have seen this approach in Create Entity Data M ...
- 《Head First Servlets & JSP》-11-Web应用部署
Web目录 WAR文件 WAR文件只是Web应用结构的一个快照,采用了一种更可移植的压缩形式. 建立WAR文件时,就是把整个Web应用结构(去掉Web应用上下文目录,就是把WEB-INF之上的一级目录 ...
- 美团热更新Robust Demo演示
1.Android Studio clone 远程Robust项目源码 gradle 同步依赖资源,可能需要半个小时左右. 2.生成样例apk包 配置app module下build.gradle 插 ...
- 【Android学习】Merge 优化布局
<merge />标签用于减少View树的层次来优化Android的布局 新建项目,不需要改动 运行后使用“DDMS -> Dump View Hierarchy for ...
- [转]Oracle截取字符串相关函数
转至:http://www.cnblogs.com/qmfsun/p/4493918.html 1.instr(sourceString,destString,start,appearPosition ...