不要被最优策略几个字迷惑住了。
重点在分差越大。
我们考虑,牛牛每取一件物品,会得到ai的属性,并且让牛可乐失去了bi的属性,所以牛牛实际上得到了ai+bi的属性,牛可乐的取法同理,因此,这题的思想就转变为贪心。
2个姓牛的都尽可能取走ai+bi最大的物品,以此减小差距
比赛时想了个综合差值和a(b)的贪心
感觉只有差值=a(b),且不是同一物品时,两个物品都可以选 可能有错误 但只有25.87分
想的一些输入数据
1.2
100 1
200 101
2. 3
100 6 5
98 1 1000
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; int a[N],b[N]; struct P{ int s,id; }c[N]; bool cmp(P a,P b){ return a.s>b.s; } int main(){ int n; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i],c[i].s=a[i]+b[i],c[i].id=i; sort(c+1,c+1+n,cmp); for(int i=1;i<=n;i+=2)cout<<c[i].id<<' '; cout<<endl; for(int i=2;i<=n;i+=2)cout<<c[i].id<<' '; cout<<endl; return 0; } /*#include<bits/stdc++.h>//f using namespace std; const int N=2e5+5; int ansa[N],ansb[N],flag[N]; struct P{ int d,id; }da[N],db[N],a[N],b[N]; bool cmp(P a,P b){ return a.d>b.d; } int main(){ int n; cin>>n; for(int i=1;i<=n;i++)cin>>a[i].d; for(int i=1;i<=n;i++)cin>>b[i].d,da[i].d=b[i].d-a[i].d,da[i].id=i,db[i].d=a[i].d-b[i].d,da[i].id=db[i].id=a[i].id=b[i].id=i; sort(da+1,da+n+1,cmp); sort(db+1,db+n+1,cmp); sort(a+1,a+n+1,cmp); sort(b+1,b+n+1,cmp); //for(int i=1;i<=n;i++)cout<<da[i].d<<' '<<db[i].d<<endl; int a1=1,b1=1,a2=1,b2=1,rest=n,tota=0,totb=0; while(rest){ while(flag[a[a1].id]&&a1<n)a1++; while(flag[da[a2].id]&&a2<n)a2++; if(a[a1].d>=da[a2].d) {//相等的时候有两种选择 ansa[++tota]=a[a1].id; rest--; flag[a[a1].id]=1; } else { ansa[++tota]=da[a2].id; rest--; flag[da[a2].id]=1; } /* while(flag[da[na].id]&&na<n)na++; if(!flag[da[na].id]){ ansa[++tota]=da[na].id; rest--; flag[da[na].id]=1;} if(rest){ while(flag[b[b1].id]&&b1<n)b1++; while(flag[db[b2].id]&&b2<n)b2++; if(b[b1].d>=db[b2].d) { ansb[++totb]=b[b1].id; rest--; flag[b[b1].id]=1; } else { ansa[++totb]=db[b2].id; rest--; flag[db[b2].id]=1; } } /* if(rest){ while(flag[da[na].id]&&na<n)na++; if(!flag[da[na].id]){ ansb[++totb]=da[na].id; rest--; flag[da[na].id]=1;} } } for(int i=1;i<=tota;i++) if(i==tota)cout<<ansa[i]<<endl; else cout<<ansa[i]<<' '; for(int i=1;i<=totb;i++) if(i==totb)cout<<ansb[i]<<endl; else cout<<ansb[i]<<' '; return 0; }*/