题目大意:有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; }
评论
还没有任何评论,你来说两句吧!