当前位置: 首页 > news >正文

3956. 截断数组

3956. 截断数组 - AcWing题库

 3956. 截断数组

【题目描述】

给定一个长度为 nn 的数组 a1,a2,…,ana1,a2,…,an。

现在,要将该数组从中间截断,得到三个非空子数组。

要求,三个子数组内各元素之和都相等。

请问,共有多少种不同的截断方法?

【输入】

第一行包含整数 nn。

第二行包含 nn 个整数 a1,a2,…,ana1,a2,…,an。

【输入】

输出一个整数,表示截断方法数量。

数据范围

前六个测试点满足 1≤n≤10;1≤n≤10。
所有测试点满足 1≤n≤10^{5 };1≤n≤10^{5 },−10000≤a_{i}≤10000;−10000≤a_{i}≤10000。

解题思路:

因为题意是由一个不变的数组,截成三段,所以这个数组的总和 sum 是相等的,其中截成的三段的值要都相等,那么这三段应该截成的三段它们的和应该满足: sum1==sum2==sum3==sum/3 .首先想到的是用前缀和,后缀和,因为要判断的情况太多了,刚开始是这么写的:

大概是先判断前缀和到达 sum1==sum/3 的时候就判断后缀和,但是会有漏掉的情况,因为 i 层的循环是一直自增的,判断完第一段满足要求后,接着要遍历后一段满足要求的区域,此时可以用数组来存储后一段满足条件的 sum3==sum 的部分(数据过大时可能会重复计算很多遍),而且还要保证统计出来的数量没有重复的部分。

一直在改的错误代码:

#include<stdio.h>
int a[100005],book[100005];
int main(){int n,sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+a[i];}int x=sum/3;if(sum%3!=0){printf("0\n");return 0;}int S=0;int sum1=0,sum2=0;int k=n-1,i,j;for(i=0;i<n;i++){sum1=sum1+a[i];if(sum1==x){for(k=n-1;k>i+1;k--){if(sum2==x){S++;book[k]=1;}sum2=sum2+a[k];n--;if(book[k]==0&&sum2==x){S++;book[k]=0;}}}} printf("%d\n",S);return 0;
} 

然后,看到题解,写的很简单。(sum 是数组的总和)

他的思路是记录前缀和(sum1)中满足 sum1==sum/3 的部分(也就是第一次截断的点)以及满足 sum1==sum/3*2 的部分(第二次截断的点)。

数据有些大,要开 long long 存储。

#include<stdio.h>
int a[100005];
int main(){int n,x,sum=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+a[i];}x=sum/3;long long S=0,ans=0;long long flag=0;if(sum%3!=0||n<3){printf("0\n");return 0;}for(int i=0;i<n-1;i++){//第二次截断后,第三个位置不能为空 S=S+a[i];if(S==2*x)ans=ans+flag;if(S==x)flag++;}printf("%lld\n",ans);return 0; 
}

795.前缀和

代码如下:

#include<stdio.h>
int sum[100005];
int main(){int a,b,x,n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){scanf("%d",&x);sum[i]=sum[i-1]+x;} for(int i=0;i<m;i++){scanf("%d%d",&a,&b);printf("%d\n",sum[b]-sum[a-1]);}return 0;
}

796.子矩阵的和

 代码如下:

#include<stdio.h>
int a[1005][1005],sum[1005][1005];
int main(){int x,y,z,w,i,j,n,m,k;scanf("%d%d%d",&n,&m,&k);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&a[i][j]);}}for(i=1;i<=n;i++){for(j=1;j<=m;j++){sum[i][j]=a[i][j]+sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1];}}for(i=0;i<k;i++){scanf("%d%d%d%d",&x,&y,&z,&w);printf("%d\n",sum[z][w]-sum[x-1][w]-sum[z][y-1]+sum[x-1][y-1]);}
}

 

相关文章:

3956. 截断数组

3956. 截断数组 - AcWing题库 3956. 截断数组 【题目描述】 给定一个长度为 nn 的数组 a1,a2,…,ana1,a2,…,an。 现在&#xff0c;要将该数组从中间截断&#xff0c;得到三个非空子数组。 要求&#xff0c;三个子数组内各元素之和都相等。 请问&#xff0c;共有多少种不同…...

React Labs: 我们最近在做什么——2023 年 3 月

原文&#xff1a;https://react.dev/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023 React Server Components React Server Components(下文简称 RSC) 是由 React 团队设计的新应用程序架构。 我们首先在一个介绍性演讲和一个RFC中分享了我们对 RSC 的…...

文件系统设计详解

抽象的文件系统以目录的形式来组织文件&#xff0c;我们可以利用该文件系统来读取某个文件的内容&#xff0c;也可以对目录或者文件实施监控并及时获取变化的通知。 IChangeToken IChangeToken对象就是一个与某组监控数据相关联的“令牌”&#xff08;Token&#xff09;&#x…...

好看~立马启动python实现美女通通下

人生苦短&#xff0c;我用python一、环境版本使用二、代码实现思路三、代码展示&#xff1a;导入模块伪装(请求头)四、部分好看截图&#xff0c;更多的就自己去采集噜~吃饭放松的时候哇一不小心看见了很多好看的东西 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 独乐乐不如众乐乐&#xf…...

Git 安装设置

1、安装 安装以下三个软件&#xff1a; Git-2.13.3-64-bit.exe TortoiseGit-2.4.0.2-64bit.msi TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi 安装过程中不用填写、不用选择&#xff0c;全部点"下一步"&#xff0c;完成后需要重启机器。 2、基本设…...

Python-闭包

介绍 Python的闭包是一种高级的编程技巧&#xff0c;它可以在函数内部定义另一个函数&#xff0c;并返回该函数的引用。这个内部函数可以访问外部函数的变量和参数&#xff0c;即使外部函数已经执行完毕 好处 1&#xff09;闭包可以避免全局变量的污染&#xff0c;使得代码更…...

Gitlab中Pipeline语法四

Gitlab中Pipeline语法 cache cache:paths 在job build中定义缓存,将会缓存target目录下的所有*.jar文件当全局定义了cache:paths会被job中覆盖.以下实例将缓存target目录 buld:script: buildcache:paths:- target/*.jar#设置key可以解决cache被覆盖 cache:paths:- my/files…...

Go语言精修(尚硅谷笔记)第五章

五、程序流程控制 5.1 单分支控制 package main import ("fmt" )func main() {//请大家看个案例[ifDemo.go]://编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 "你年龄大//于18,要对自己的行为负责!"//分析 //1.年龄 > var age int…...

三、MySQL 高级(DML 增删改)

三、MySQL 高级&#xff08;DML 增删改&#xff09; 3.1 DML 数据操纵语言 DML&#xff08;Data Manipulation Language&#xff09;DML对数据库中表记录的执行操作 插入&#xff08;INSERT&#xff09; 插入单行数据 插入多行数据 将查询结果插入到新表 更新&#xff08…...

面向AI编程的本质是什么?

面向AI编程的本质是什么&#xff1f; 面向AI编程的本质是编程的第五代编程语言&#xff0c;与自然语言非常相似&#xff0c;但是是有区别的。 因此出现了针对与AI通话的提示工程。 简单地回顾一下编程语言的发展史&#xff0c; 第一代编程语言是机器语言&#xff0c;它直接使…...

深入浅出——深度学习训练中的warmup

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

你知道如何用C语言将格式化数据和字符串相互转换吗?

今天重点介绍2个函数&#xff0c;分别是sprintf和sscanf&#xff0c;用来将格式化数据和字符串相互转换。它们的作用分别是&#xff1a; sprintf函数用于将格式化数据转换成字符串。sscanf函数用于将字符串转换成格式化数据。 接下来是第一个大问题&#xff1a;我怎么记忆呢&…...

免费一键生成原创文章-原创文章批量生成

免费使用一键生成原创文章&#xff0c;轻松解决写作难题&#xff01; 您是否因为写作枯竭、文章档次不高&#xff0c;而感到烦恼&#xff1f;现在&#xff0c;我们有一个免费的文章创作工具&#xff0c;帮助您无需付出太多的努力就能高效地创造原创文章。 一键生成&#xff1…...

【数据库管理】④重做日志Redo Log

1. Redo log(重做日志)的功能 重做日志&#xff08;Redo log&#xff09;是数据库管理系统中的一种机制&#xff0c;主要作用包括&#xff1a; 提供事务的持久性支持&#xff1a;重做日志记录了每个事务对数据库所做的修改操作&#xff0c;以便在系统故障或崩溃时&#xff0c;通…...

5-python文件操作

文章目录1.打开文件2.文件读取3.文件关闭4.文件写入/追加1.打开文件 当传参顺序不一致时&#xff0c;不能使用位置传参&#xff0c;应使用关键字传参 open(file, mode‘r’, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 通常使用&#xf…...

企业级Oracle入门Linux/Unix基础①

1、了解计算机系统的组成、操作系统介绍、IT技术发展与云计算、服务器的分类、存储设备介绍、常用的主机存储有哪些&#xff1f; 1.1 计算机系统的组成&#xff1a; 计算机系统由硬件和软件两部分组成。硬件包括中央处理器&#xff08;CPU&#xff09;、内存、输入输出设备、…...

NexNoSQL Client:Elasticsearch、Redis、MongoDB三合一的可视化客户端管理工具

背景&#xff1a; 工作中我们使用了Elasticsearch作为存储&#xff0c;来支持内容的搜索&#xff0c;Elasticsearch这个软件大家都耳熟能详&#xff0c;它是一个分布式、高扩展、高实时的搜索与数据分析引擎&#xff0c;不仅仅支持文本索引&#xff0c;还支持聚合操作&#xf…...

如果大学能重来,我绝对能吊打90%的大学生,早知道这方法就好了

最近收到很多大学生粉丝的私信&#xff0c;大多数粉丝们都迷茫着大学计算机该怎么学&#xff0c;毕业后才能找到好工作。 可能是最近回答这方面的问题有点多&#xff0c;昨晚还真梦回大学…其实工作了20多年&#xff0c;当过高管&#xff0c;创过业&#xff0c;就差没写书了。…...

FactoryBean是现在的执行时机

调用getBean方法&#xff0c;最终到org.springframework.beans.factory.support.DefaultListableBeanFactory#preInstantiateSingletons方法&#xff1a; for (String beanName : beanNames) {RootBeanDefinition bd getMergedLocalBeanDefinition(beanName);if (!bd.isAbstr…...

自定义注解使用

现象&#xff1a; 自定义注解使用 方法&#xff1a; 1&#xff1a;元注解 java.lang.annotation 下定义了元注解 Documented 文档相关 标注了此注解则会包含在javadoc文档中Retention 指定注解生命周期Target 指定注解作用范围Inherited 指定子类可以继承父类的注解Native …...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...