测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25786. 给定一个由n个整数组成的数列,请将其分割成左右两部分, 要求左半部分子数列的和与右半部分子数列的和最接近,请输出这两部分子数列和的差值(取非负值)。例如:n=5,数列中的5个整数分别是2、1、3、4、3,将其分割成左右两部分,左半部分是2、1、3,右半部分是4、 3;此时两部分子数列的和最接近,差值为1。输入描述第一行输入一个整数n(2≤n≤100000)第二行输入n个整数(1≤整数≤1000)…

填空题 中等

题目描述

给定一个由n个整数组成的数列,请将其分割成左右两部分, 要求左半部分子数列的和与右半部分子数列的和最接近,请输出这两部分子数列和的差值(取非负值)。

例如:n=5,数列中的5个整数分别是2、1、3、4、3,将其分割成左右两部分,左半部分是2、1、3,右半部分是4、 3;此时两部分子数列的和最接近,差值为1。

输入描述

第一行输入一个整数n(2≤n≤100000)

第二行输入n个整数(1≤整数≤1000),整数之间以一个空格隔开

输出描述

输出一个整数,表示这两部分子数列和的差值(取非负值)

样例输入

5
2 1 3 4 3

样例输出

1

参考答案

#include <bits/stdc++.h> using namespace std; int a[100005]; int main() { int n, ans = 1e9; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; a[i] += a[i - 1]; } for (int i = 1; i <= n; i++) ans = min(ans, abs((a[n] - a[i]) - (a[i] - a[i - 1]))); cout << ans; return 0; }
上一题 下一题