Phoenix has n coins with weights 21,22,…,2n. He knows that n is even.
He wants to split the coins into two piles such that each pile has exactly n2 coins and the difference of weights between the two piles is minimized. Formally, let a denote the sum of weights in the first pile, and b denote the sum of weights in the second pile. Help Phoenix minimize |a−b|, the absolute value of a−b.
Input
The input consists of multiple test cases. The first line contains an integer t (1≤t≤100) — the number of test cases.
The first line of each test case contains an integer n (2≤n≤30; n is even) — the number of coins that Phoenix has.
Output
For each test case, output one integer — the minimum possible difference of weights between the two piles.
Example
Input
2
2
4
Output
2
6
Note
In the first test case, Phoenix has two coins with weights 2 and 4. No matter how he divides the coins, the difference will be 4−2=2.
In the second test case, Phoenix has four coins of weight 2, 4, 8, and 16. It is optimal for Phoenix to place coins with weights 2 and 16 in one pile, and coins with weights 4 and 8 in another pile. The difference is (2+16)−(4+8)=6.
思路:要想使得这两个部分和的差值最小。
因为(2^n)>(2 ^ 1+2 ^2+2 ^3+…+2 ^(n-1))。所以我们把2的n次方分配给某一个人之后,这个人剩下的需要分配的就是剩下的最小的n/2-1个。其余的分配给第二个人。
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
ll sum1=0,sum2=0;
for(int i=1;i<n/2;i++) sum1+=((ll)(1<<i));
sum1+=((ll)(1<<n));
for(int i=n/2;i<n;i++) sum2+=((ll)(1<<i));
printf("%lld\n",abs(sum1-sum2));
}
return 0;
}
努力加油a啊,(o)/~