Codeforce 798D(贪心)

来源:互联网 发布:淘宝上的杂牌手机 编辑:程序博客网 时间:2024/06/01 09:48

链接:点击打开链接

题意:给出两个长度为n的数组A,B,要求从A,B中取出至多n/2+1个下标相同的元素,使得取出的A的和大于二倍A数组的总和,取出的B大于二倍B数组的总和

代码:

#include <vector>#include <string>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;struct node{    int a,b,id;    friend bool operator<(node x,node y){        return x.a>y.a;    }}s[100005];int main(){                                     //按照a的大小从大到小排序,把第一个取出后    int n,i,j;                                  //每次去两个中b较大的,从而保证了取出的b一    while(scanf("%d",&n)!=EOF){                 //大于剩下的b,上一次取出的a一定大于当前取        for(i=1;i<=n;i++)                       //的a        scanf("%d",&s[i].a);                    //可能因为数据时随机的,所以还可以玄学随机...        for(i=1;i<=n;i++){            scanf("%d",&s[i].b);            s[i].id=i;        }        sort(s+1,s+n+1);        printf("%d\n",n/2+1);        printf("%d ",s[1].id);        for(i=2;i+1<=n;i+=2){            if(s[i].b>s[i+1].b)            printf("%d ",s[i].id);            else            printf("%d ",s[i+1].id);        }        if(n%2==0)        printf("%d\n",s[n].id);        else        printf("\n");    }    return 0;}

0 0
原创粉丝点击