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

相关推荐
在世修行2 小时前
从零打造 C# 工业视觉检测系统(八):Modbus RTU 协议解析与 PLC 剔除控制实战
开发语言·c#
sunburn-2 小时前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea
AI直播技术杂谈2 小时前
AI直播推流链路中延迟优化的通用技术方案
开发语言·人工智能·php
2601_957174652 小时前
大模型算法 简单 容易 用这个方法
算法
VALENIAN瓦伦尼安教学设备2 小时前
激光对中仪采购要点
数据库·嵌入式硬件·算法
Dxy12393102163 小时前
python 中的 APScheduler 使用详解
开发语言·python
lilili也4 小时前
visual studio add matlab
c语言·c++
沫璃染墨4 小时前
《Qt从零入门系列(一):Qt框架初识——从发展历史到跨平台开发》
c++·qt·系统架构·gui
Forever Nore4 小时前
LeetCode 1 两数之和
算法·leetcode·职场和发展