题目描述:
贝茜和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;
}