题目大意:有n(n一定是偶数)堆硬币,他们的重量依次是21,22,…,2n。现在需要把他们分成两份,并让这两份硬币总质量之差的绝对值尽可能的小,请找到这个方案并输出质量之差的绝对值作为答案。

分法不难想, 将重量为2n的给第一份,重量为2n-1~2n-n/2-1的部分给第二份,剩下的再分给第一份。

原因很简单,2~ 2n 中 2n 大于其他n-1个数之和,所以先把 2n 拉出来单独放一堆,然后让另一堆的值尽可能大就行了。

观察答案:

  1. n=2,ans=2
  2. n=4,ans=6
  3. n=6,ans=14
  4. 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;
}