IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [Acwing] 第16场周赛 B.3956. 截断数组 -> 正文阅读

[C++知识库][Acwing] 第16场周赛 B.3956. 截断数组

前言

t a g : tag : tag: 前缀和 二分 思维
传送门 :

题意

给定一个数组 a [ ] a[] a[],长度 n n n

询问有多少种方法,可以使得数组均分成三份

数据范围 n ∈ [ 1 , 1 0 5 ] n\in[1,10^5] n[1,105]

思路

根据数据范围,显然是要控制在 n l o g n nlogn nlogn以下的

对于这种题,一开始就想到的是二分,但是如果对进行二分的话,会发现不满足单调性,因为 a [ i ] < 0 a[i]<0 a[i]<0的情况存在

因此不妨换一个方向进行二分

首先我们可以出来 s u m [ i ] = = ( s u m [ n ] / 3 ) sum[i]==(sum[n]/3) sum[i]==(sum[n]/3)的下标,用于表示一个分组满足条件的下标

然后我们再处理出来 s u m [ i ] = = 2 ? ( s u m [ n ] / 3 ) sum[i]==2*(sum[n]/3) sum[i]==2?(sum[n]/3)的下标,用于处理二个分组条件的下标

我们会发现如果前面两个分组定下来了,那么第三个数组也定下来了

因此我们只再 两个分组满足条件的集合中寻找 有多少个 单一分组满足条件

Code

const int N = 1e5+10;
int n;
int s[N];
vector<int> v1,v2;

void solve(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i] = s[i-1] +  s[i];
	}
	
	if(s[n]%3){
		cout<<0<<endl;
		return;
	}
	
	int avg  = s[n]/3;
	ll res = 0 ;
	
	//枚举第一个分组
	for(int i=1;i+2<=n;i++) 
	if(s[i] == avg) 
	v1.pb(i);
	
	//枚举第二个分组
	for(int  i=2;i+1<=n;i++)
	if(s[i] == 2*avg) v2.pb(i);
	
	//寻找第三个分组
	for(int i=0;i<v1.size();i++){
		int pos = upper_bound(all(v2),v1[i])-v2.begin();
		 res += v2.size()-pos;
	}
	cout<<res<<endl;
	
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 10:54:21  更:2022-05-06 10:54:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 4:21:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码