栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

拔河比赛(解决方案)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

拔河比赛(解决方案)

题目描述

今天小Q班的体育课,是进行拔河比赛。同学们个个兴奋极了。体育老师一声令下,就抢着拉绳子占好了位置,谁也不肯让谁。 
每位同学都一个力量值,为了让两边队伍实力均衡,体育老师想找一个合适的“中点”,将队伍分成两边,使得两个队伍力量总值相差最小。你来帮体育老师想想办法?

输入

第一行有两个正整数。一个整数N( 2 <= N <= 500000),表示小Q班上的人数。
第二行有N个整数,依次表示队伍中每位同学的力量值P(0<=p<=1000)。

输出

输出两个数x和y。 表示在x和y之间设置“中点”,可以使队伍两边的力量总值相差最小(如果有多个中点,则以x大优先)。

样例输入

10
65 50 80 85 120 95 85 55 75 120

样例输出

5 6

提示

前5个人的力量和为400,后5个人的力量和为430,最小差值为30。
数据范围:
对于60%的数据    N<10000;
对于100%的数据  N<500000;

代码如下:

#include
using namespace std;
int a[1001000];
int b[1001000];
int main()
{
	long long n;
	cin>>n;
	long long sum=0;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	long long number=0;
	for(long long i=1;i<=n;i++)
	{	number+=a[i];
		b[i]=abs(sum-number-number);
	}
	long long min,location;
	min=b[1];location=1;long long i;
	for(i=1;i=b[i])
		{
			min=b[i];
			location=i;
		}
	}
	cout< 

1,解决了队伍中存在力量值为零的问题。(某些思路会受数字零的存在而被影响)。

2,找到合适的问题切入思路,否则思路的选择会影响整个题实现的难易程度。

3,核心部分仅进行一次循环,找到当前位置下力量值的差异,存入另外的数组当中,在稍后进行比较筛选即可。

4,注意数值的大小,int类型会溢出,可以用longlong进行存取。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/629359.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号