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

相关推荐
萧西待水5 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
梦帮科技7 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
泯泷7 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm7 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈8 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
传奇开心果编程9 小时前
【Rust入门练中学】第2课:变量、可变性与常量
开发语言·学习·rust
zr想努力9 小时前
从0开始配置Perforce4环境
开发语言
Navigator_Z10 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
幸运小圣10 小时前
PointerEvent 常用属性与事件整理【JavaScript】
开发语言·javascript·ecmascript
长谷深风11111 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent