当前位置: 首页 > news >正文

蓝桥云客 拔河

1.拔河 - 蓝桥云课

问题描述

小明是学校里的一名老师,他带的班级共有 n 名同学,第 i 名同学力量值为 ai​。在闲暇之余,小明决定在班级里组织一场拔河比赛。为了保证比赛的双方实力尽可能相近,需要在这 n 名同学中挑选出两个队伍,队伍内的同学编号连续:{a1​,ai+1​,…,ar1​​} 和 {al2​​,al2​+1​,…,ar2​−1​,ar2​​},其中 l1​≤r1​<l2​≤r2​。

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

输入格式

输入共两行。

第一行为一个正整数 n。

第二行为 n 个正整数 ai​。

输出格式

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

样例输入

5
10 9 8 12 14

样例输出

1

样例说明

其中一种最优选择方式:

队伍1:{a1​,a2​,a3​},队伍2:{a4​,a5​},力量值和分别为 10+9+8=27,12+14=26,差距为 ∣27−26∣=1。

评测用例规模与约定

对于 20% 的评测用例,保证 n≤50。

对于 100% 的评测用例,保证 n≤103,ai​≤109。

思路:

1.题目没有说一定要选完全部人
2.重复的如何处理
3.并且保证队伍一个在左一个在右

代码如下:

#include <iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll; 
const ll L = 1e3+10;
ll a[L],pre[L];
vector <ll> num;
ll n,ans = 1e10;
int main()
{cin >> n;for(ll i = 1 ; i <= n ; i++){cin >> a[i];pre[i] = pre[i-1] + a[i];}for(ll i = 1 ; i <= n ; i++)//把所有区间的集合存进数组 {for(ll j = i ; j <= n ; j++){ll t = abs(pre[j] - pre[i-1]);if(t == pre[n])continue;
//		cout <<t << " ";num.push_back(t);} }sort(num.begin(),num.end());//排序,单调递增 for(ll i = 0 ; i < num.size() - 1 ; i++){ans = min(ans,abs(num[i] - num[i + 1])); }cout << ans;return 0;
}


http://www.mrgr.cn/news/93768.html

相关文章:

  • 【Go学习实战】03-2-博客查询及登录
  • rpc和proto
  • 【向量模型】 开源通用向量模型BGE (BAAI General Embedding)
  • NebulaGraph学习笔记-SessionPool之getSession
  • C语言_数据结构总结4:不带头结点的单链表
  • ArduPilot开源代码之AP_OSD
  • MoonSharp 文档一
  • Django与数据库
  • Linux内核学习(一)——Vmware虚拟机安装Ubuntu20.4系统及QEMU模拟ARM64 Linux
  • Java线程池深度解析,从源码到面试热点
  • Codecraft-17 and Codeforces Round 391 E. Bash Plays with Functions 积性函数
  • 3.9【Q】csd
  • 线上接口tp99突然升高如何排查?
  • C++算法——差分
  • [通讯协议]485通信
  • 每日一题——乘积最大子数组
  • <建模软件安装教程1>Blender4.2系列
  • 2024华为OD机试真题-找最小数(C++)-E卷B卷-100分
  • 13.C语言指针的易错点
  • html-列表标签和表单标签