打卡信奥刷题(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考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

相关推荐
h39741 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
夏幻灵2 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码3 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客3 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx4 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆4 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光4 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
信奥卷王5 小时前
[GESP202609 六级] 分树规划
算法
夏幻灵5 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
码云数智-园园5 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言