C++ 大型舞会(分治)

题目描述:

贝茜和N (1 <= N <= 2,200) 头被编号为1..N的母牛们去参加一个舞会,在那里有很多公牛可以成为自己的舞伴。因为母牛们被公牛们选择成为舞伴的特殊方式,这个舞会被称为“奇数母牛出局”的舞会。 
母牛们按照编号从小到大的顺序排列,选择中间的点将母牛们要么恰好分成数目相同的两部分,要么分成第一部分的母牛恰好比第二部分母牛的多一只。分成的两部分中,如果某部分的母牛只有两只了,则选择她们与公牛跳舞,并将这两只母牛的编号相乘,然后加到总和sum中;如果某部分的母牛只有一只了,则给她一束美丽的玫瑰花作为安慰奖并送她回家;如果某部分的母牛超过两只,便不断地这样分直到某一部分只有1只或2只母牛。 
给出参加舞会的母牛的数量,计算在所有适合的母牛都被选择之后总和sum 的值。 
例如,11只母牛参加舞会编号从1..11。下面是划分她们的过程: 

舞会的sum值是188。

输入格式

第一行:一个单独的整数N

输出格式

一行:sum的值

输入/输出例子1

输入:

11

输出:

188

样例解释

代码:

#include <bits/stdc++.h>
using namespace std;
long long n,m,sum=0,a[100005],b[100005];
void work(int l,int r)
{
	if(l+1==r)
	{
		sum+=l*r;
		return;
	}
	if(l==r) return;
	int mid=(l+r)/2;
	work(l,mid);
	work(mid+1,r);
}
int main()
{
	cin>>n;
	work(1,n);
	cout<<sum;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值