zoukankan      html  css  js  c++  java
  • CF789D Mike and distribution

    题目连接

    一道人类智慧题。。。。

    这道题目可以转化为在a,b中的选出一些位置,使得这些位置处的值加起来大于没有选的位置的值

    我们按照a的权值排序,选择第一个元素,其与元素两两分组,每组选择b更大的那一个

    很显然这样对于数组b是满足要求的,然后我们发现第i组的a权值肯定大于第i+1组的没有选的位置的权值,

    在加上我们选择了第一个元素,所以a数组也是满足要求的

    # include<iostream>
    # include<cstdio>
    # include<cmath>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    const int mn = 1e5 + 10;
    int n,m,ans[mn],tot;
    struct node{int a,b,pos;};
    node da[mn];
    bool cmp(node x,node y)
    {
        return x.a>y.a;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&da[i].a),da[i].pos=i;
        for(int i=1;i<=n;i++)
            scanf("%d",&da[i].b);
        sort(da+1,da+1+n,cmp);
        ans[++tot]=da[1].pos;
        for(int i=2;i<=n;i+=2)
        {
            if(i==n)
            {
                ans[++tot]=da[i].pos;
                break;
            }
            if(da[i].b>da[i+1].b) ans[++tot]=da[i].pos;
            else ans[++tot]=da[i+1].pos;
        }
        printf("%d
    ",tot);
        for(int i=1;i<=tot;i++)
            printf("%d ",ans[i]);
        return 0;
    }
  • 相关阅读:
    Jquery想说爱你不容易
    关于css
    sass相关实例
    web前端学习之HTML
    web前端学习
    软件工程来换网前端设计
    关于前端开发的相关资料及例子
    四则运算
    自我介绍
    关于读完《软件工程》之后不解的问题
  • 原文地址:https://www.cnblogs.com/logeadd/p/9528030.html
Copyright © 2011-2022 走看看