A - Phoenix and Balance CodeForces - 1348A

    技术2024-08-22  55

    CodeForces - 1348A 

    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.

    题意:将1到2^2n的n个数(n为偶数)平均分成两个部分,使得两部分的和之差为最小。

    题解:因为2^n比前面所有数的总和都大,所以在分配的时候只要让前n/2-1个最小的数和最大的数分成一组,其他数分成一组,就能得到最小的和之差。

    #include<iostream> #include<cmath> #include<algorithm> using namespace std; int t, n; int main(){ scanf("%d", &t); while(t--){ scanf("%d", &n); int right = pow(2, n), left = 0; for(int i=1; i<n/2; i++) right += pow(2, i); for(int i=n/2; i<n; i++) left += pow(2, i); printf("%d\n", right - left); } return 0; }

     

    Processed: 0.010, SQL: 9