第一题,一个老头分财产,老大拿最大的,老二拿第二大。接下来总财产小的拿,如果一样就老大拿,判断最后多的比少的多拿多少?
双指针
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int>vec(2*n);
for (int k = 0; k < 2 * n; k++)
{
cin>>vec[k];
}
sort(vec.begin(), vec.end());
//双指针
int i = vec.size() - 1, j = vec.size() - 2;
int son1 = vec[i], son2 =vec[j];
while (i > 0 && j > 0)
{
if (son1 > son2)
{
j--;
i -= 3;
son1 = son1 + vec[i];
son2 = son2 + vec[j];
}
else
{
i--;
j -= 3;
son1 = son1 + vec[i];
son2 = son2 + vec[j];
}
}
cout << son1 - son2;
}
这篇博客介绍了一个关于老头按特定规则分配财产的问题,通过双指针技术求解老大和老二最终财产差额。代码实现中,首先读取并排序了所有财产,然后使用双指针从最大财产开始,根据规则更新两个儿子的财产,直到所有财产分配完毕,最后输出两人财产的差值。
1202

被折叠的 条评论
为什么被折叠?



