打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河

P10429 蓝桥杯 2024 省 B 拔河

题目描述

小明是学校里的一名老师,他带的班级共有 nnn 名同学,第 iii 名同学力量值为 aia_iai。在闲暇之余,小明决定在班级里组织一场拔河比赛。

为了保证比赛的双方实力尽可能相近,需要在这 nnn 名同学中挑选出两个队伍,队伍内的同学编号连续 {al1,al1+1,...,ar1−1,ar1}\{{a_{l_1}}, a_{l_1 + 1}, \dots, a_{r_1 - 1}, a_{r_1}\}{al1,al1+1,...,ar1−1,ar1} 和 {al2,al2+1,...,ar2−1,ar2}\{{a_{l_2}}, a_{l_2 + 1}, \dots, a_{r_2 - 1}, a_{r_2}\}{al2,al2+1,...,ar2−1,ar2},其中 l1≤r1<l2≤r2l_1 \le r_1<l_2 \le r_2l1≤r1<l2≤r2。

两个队伍的人数不必相同,但是需要让队伍内的同学们的力量值之和尽可能相近。请计算出力量值之和差距最小的挑选队伍的方式。

输入格式

输入共两行。

第一行为一个正整数 nnn。

第二行为 nnn 个正整数 a1,a2,...,ana_1, a_2, \dots ,a_na1,a2,...,an。

输出格式

输出共一行,一个非负整数,表示两个队伍力量值之和的最小差距。

输入输出样例 #1

输入 #1

复制代码
5
10 9 8 12 14

输出 #1

复制代码
1

说明/提示

样例 1 解释

其中一种最优选择方式:

队伍 111:{a1,a2,a3}\{a_1, a_2, a_3\}{a1,a2,a3},队伍 222:{a4,a5}\{a_4, a_5\}{a4,a5},力量值和分别为 10+9+8=2710 + 9 + 8 = 2710+9+8=27,12+14=2612 + 14 = 2612+14=26,差距为 ∣27−26∣=1|27 − 26| = 1∣27−26∣=1。

数据规模与约定

  • 对 20%20\%20% 的数据,n≤50n \leq 50n≤50。
  • 对全部的测试数据,保证 2≤n≤1032 \leq n \leq 10^32≤n≤103,1≤ai≤1091 \leq a_i \leq 10^91≤ai≤109。

C++实现

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
int n;
long long a[maxn], ans = 1e9;
multiset<long long> S;
long long minnum(long long a, long long b) {
	return a > b ? b : a;
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++) 
		cin >> a[i], a[i] = a[i - 1] + a[i];//前缀和维护
	for (int i = 1; i <= n; i++) 
		for (int j = i; j <= n; j++)
			S.insert(a[j] - a[i - 1]);//全部插入
	for (int i = 1; i < n; i++) {
		for (int j = i; j <= n; j++) {
			auto p = S.find(a[j] - a[i - 1]);
			S.erase(p);//删除
		}
		for (int j = 1; j <= i; j++) {
			auto k = a[i] - a[j - 1];
			auto p = S.lower_bound(k);
			if (p != S.end()) 
				ans = minnum(ans, abs(*p - k));
			if (p != S.begin()) 
				p --, ans = minnum(ans, abs(*p - k));
		}
	}
	cout << ans;
	return 0;
}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

相关推荐
lpfasd1232 分钟前
推荐算法进化史
算法·机器学习·推荐算法
xiaoye-duck9 分钟前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(上):初始化和全量响应
开发语言·网络·c++·语言模型
Pniubi12 分钟前
力扣543二叉树的直径(深度优先搜索法(递归))
算法·leetcode·职场和发展
fpcc14 分钟前
跟我学c++中级篇—streambuf在glog中的应用分析
开发语言·c++
吾与谁归in16 分钟前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
码匠许师傅25 分钟前
【C++三方组件】OpenCV:计算机视觉的事实标准
c++
昂好的day27 分钟前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf
黎相思28 分钟前
BTree
数据结构·b树·b+树
飞浪纪元[FWC–FE]30 分钟前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
fly-iot31 分钟前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang