1 条题解
-
0

#include <bits/stdc++.h> using namespace std; #define ll long long #define the_end return 0; const int N=5e5; struct Node{ ll a,b,idx,flag; friend Node operator + (Node x,Node y){ return Node{x.a+y.a,x.b+y.b,x.idx,x.flag}; } }; Node r[N+10],suma,sumb; ll n; bool cmpa(Node x,Node y){ return x.a>y.a; } bool cmpidx(Node x,Node y){ return x.idx<y.idx; } int main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>r[i].a; } for(int i=1;i<=n;i++){ cin>>r[i].b; r[i].idx=i; } sort(r+1,r+1+n,cmpa); for(int i=1;i<=n;i++){ if(suma.a<sumb.a){ suma=suma+r[i]; r[i].flag=0; } else { sumb=sumb+r[i]; r[i].flag=1; } } if(suma.b>sumb.b){//如果现在的这个集合在第二个人眼中的价格较低,那么就把两个集合交换,让第二个人选择另一个集合 for(int i=1;i<=n;i++){ r[i].flag=1-r[i].flag; } } sort(r+1,r+1+n,cmpidx); for(int i=1;i<=n;i++){ cout<<r[i].flag<<" "; } the_end }
- 1
信息
- ID
- 3374
- 时间
- 6000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者