思路
仍然是大佬题解
一个人拿走了ai,则另一个人就失去了bi,所以都优先选择总价值最高,不是只拿自己价值最高的物品
所以按总价值从大到小排序,依次输出物品原本的序号。
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200002;
int n;
struct Node
{
int x;
int key;
}a[maxn];
int cmp(Node a,Node b) //从大到小排列函数指针
{
return a.x > b.x;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i].x;
for(int i=1;i<=n;i++)
{
int b;
cin>>b;
a[i].x += b; //直接记录总价值
a[i].key = i; //记录原来每个物品编号
}
sort(a+1,a+n+1,cmp); //数组从1开始录入,排序时起始地址要注意
for(int i=1;i<=n;i++)
{
//牛牛先拿,奇数为真
if(i&1)
printf("%d ",a[i].key);
}
cout<<endl;
for(int i=1;i<=n;i++)
{
if(!(i&1)) printf("%d ",a[i].key);
}
return 0;
}