题目大意:有n(n一定是偶数)堆硬币,他们的重量依次是21,22,...,2n。现在需要把他们分成两份,并让这两份硬币总质量之差的绝对值尽可能的小,请找到这个方案并输出质量之差的绝对值作为答案。
分法不难想, 将重量为2n的给第一份,重量为2n-1~2n-n/2-1的部分给第二份,剩下的再分给第一份。
原因很简单,2~ 2n 中 2n 大于其他n-1个数之和,所以先把 2n 拉出来单独放一堆,然后让另一堆的值尽可能大就行了。
观察答案:
- n=2,ans=2
- n=4,ans=6
- n=6,ans=14
- n=12,ans=30
......
不难得出上一个数*2+2就是下一个答案。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
ll k = 0;
for(int i = 2; i <= n; i += 2)
k = k * 2 + 2;
cout << k << endl;
}
return 0;
}