2020牛客寒假算法基础集训营2 F拿物品

不要被最优策略几个字迷惑住了。
重点在分差越大。
我们考虑,牛牛每取一件物品,会得到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;    

}*/ 

 

上一篇:趋势:从云到多云,超融合与云管平台(CMP)如期而遇


下一篇:[JSOI2015]最小表示