您现在的位置是:首页 > 编程 > 

截断数组(蓝桥杯每日一题)

2025-07-28 21:04:03
截断数组(蓝桥杯每日一题) 截断数组(蓝桥杯每日一题)给定一个长度为 n的数组 a1,a2,…,an。现在,要将该数组从中间截断,得到三个非空子数组。要求,三个子数组内各元素之和都相等。请问,共有多少种不同的截断方法?输入格式第一行包含整数 n。第二行包含 n个整数 a1,a2,…,an。输出格式 输出一个整数,表示截断方法数量。数据范围 前六个测试点满足 1≤n≤10。所有测试点满足 1≤n

截断数组(蓝桥杯每日一题)

截断数组(蓝桥杯每日一题)

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

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

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

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

输入格式

第一行包含整数 n。

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

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

数据范围 前六个测试点满足 1≤n≤10。

所有测试点满足 1≤n≤105,−10000≤ai≤10000。

输入样例1: 4 1 2 输出样例1: 1 输入样例2: 5 1 2 4 5 输出样例2: 0 输入样例: 2 0 0 输出样例: 0

算法思路

这是一个前缀和的应用,如果这个数组可以分割,那么代表这个数组的总和对三取余为0。

然后如何统计分割次数了,在可以分的前提下,如果当前的数的前缀和是总和的1/的时候,代表的是这个可以分割了,后面的那1/就是固定的了,那么结果就可以加上了,如果当前数的前缀和是总和的1/,那么代表这是一个新的方式,那么当前可以加的tmp就需要+1。

C++版本

代码语言:javascript代码运行次数:0运行复制
#include<bits/stdc++.h>
using namespace std;

int n;
ct int  = 1e5 + 10;
int num[];
long long sum;


int main()
{
    cin >> n;
    for (int i = 1; i <= n; ++ i)
    {
        cin >> num[i];
        sum += num[i];
    }
    if(sum %  != 0) cout << "0";
    else 
    {
        long long ave = sum / ;
        long long nowSum = 0, tmp = 0;
        long long ans = 0;
        for (int i = 1; i < n; ++ i)
        {
            nowSum += num[i];
            if (nowSum == 2 * ave) ans += tmp;
            if (nowSum == ave) ++ tmp;
        }
        cout << ans << endl;
    }
    return 0;
}

Java版本

代码语言:javascript代码运行次数:0运行复制
import java.util.*;

public class Main{
    static int  = 100010;
    static int n, m;
    static long res;
    static int[] a = new int[];
    static int[] s = new int[];
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);

        n = ();
        for (int i = 1; i <= n; i ++) a[i] = ();
        for (int i = 1; i <= n; i ++) s[i] = s[i - 1] + a[i];

        if (s[n] %  != 0 || n < )
        {
            println(0);
            return;
        }

        int dex = s[n] / ;
        for (int i = 1; i < n; i ++)
        {
            if (s[i] == dex * 2) res += m;
            if (s[i] == dex) ++ m;
        }

        println(res);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:202-05-08,如有侵权请联系 cloudcommunity@tencent 删除统计int数据数组算法

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1147236.html

相关标签:无
上传时间: 2025-07-19 15:55:00
留言与评论(共有 8 条评论)
本站网友 怎样治静脉曲张
15分钟前 发表
在可以分的前提下
本站网友 luxottica
11分钟前 发表
分享自作者个人站点/博客
本站网友 南湖中园二区
21分钟前 发表
那么结果就可以加上了
本站网友 腰突论坛
3分钟前 发表
a2
本站网友 邮轮码头
29分钟前 发表
那么代表这个数组的总和对三取余为0
本站网友 万能视频驱动下载
15分钟前 发表
a2
本站网友 深圳海雅百货
30分钟前 发表
那么结果就可以加上了