zoukankan      html  css  js  c++  java
  • C

    题目链接:http://codeforces.com/problemset/problem/23/C

    In 2N - 1 boxes there are apples and oranges. Your task is to choose N boxes so, that they will contain not less than half of all the apples and not less than half of all the oranges.

    Input

    The first input line contains one number T — amount of tests. The description of each test starts with a natural number N — amount of boxes. Each of the following 2N - 1 lines contains numbers ai and oi — amount of apples and oranges in the i-th box (0 ≤ ai, oi ≤ 109). The sum of N in all the tests in the input doesn't exceed 105. All the input numbers are integer.

    Output

    For each test output two lines. In the first line output YES, if it's possible to choose N boxes, or NO otherwise. If the answer is positive output in the second line N numbers — indexes of the chosen boxes. Boxes are numbered from 1 in the input order. Otherwise leave the second line empty. Separate the numbers with one space.

    Examples

    Input
    2
    2
    10 15
    5 7
    20 18
    1
    0 0
    Output
    YES
    1 3
    YES
    1
    题意:
    输入一个n (n <= 1e5), 表示接下来有 2*n-1 个盒子, 每个盒子有 a 个橘子和 b 个苹果, 现在要求你从 2*n-1 个盒子中选出 n 个盒子
    使这 n 个盒子里的橘子的总数不小于橘子总数的一半, 苹果的总数不小于苹果总数的一半
    思路:按照苹果数从小到大排序 ,每两个选择一个盒子,比如有七个盒子,排序好之后
    12中选一个 34中选一个 56选一个,再加上最后一个,这样苹果数一定大于等于一半,那么我们怎么保证橙子也超过一半呢,可以这样,每两个中选中橙子多的那个盒子
    这样就满足橙子数大于等于一半了
    看代码:
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<stack>
    #include<map>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<vector>
    #include<stack>
    #include<map>
    #include<queue>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    typedef unsigned long long ull;
    #define sc1(a) scanf("%lld",&a)
    #define pf1(a) printf("%lld
    ",a)
    #define lson l,mid,rt<<1
    #define rson mid+1,r,rt<<1|1
    const LL INF=1e18;
    const ull base=2333;
    const int maxn=1e5+55;
    const int maxm=1e4+50;
    const int maxv=1e6+5;
    const int maxk=1e8+5;
    const int mod=1e9+7;
    struct Node
    {
        LL a,b,id;
        Node(){}
        Node(LL a1,LL b1,LL id1)
        {
            a=a1;b=b1;id=id1;
        }
        bool operator < (const Node x) const
        {
            return a<x.a;
        }
    }box[maxn*2];
    int main()
    {
        LL T;cin>>T;
        LL N;
        while(T--)
        {
            cin>>N;
            for(LL i=1;i<=2*N-1;i++)
            {
                sc1(box[i].a);sc1(box[i].b);
                box[i].id=i;
            }
            sort(box+1,box+1+2*N-1);
            printf("YES
    ");
            for(LL i=1;i+1<=2*N-1;i+=2)
            {
                if(box[i].b<box[i+1].b)
                {
                    printf("%lld ",box[i+1].id);
                }
                else printf("%lld ",box[i].id);
            }
            printf("%lld
    ",box[2*N-1].id);
        }
        return 0;
    }
    /**
    
    */
  • 相关阅读:
    卖家必须了解的库存数据,亚马逊库存报告都帮你整理好了
    Genymotion 无法安装 APK 解决方案
    这张系统架构图画的漂亮!
    IT项目风险大全
    ElasticSearch是一个基于Lucene的搜索服务器
    商业模式的定义、商业模式的好坏
    如何实现互联网+业务与IT的融合
    UBUNTU PHP 版本切换
    Ubuntu为PHP安装SOAP扩展
    实现Linux下的ls -l命令
  • 原文地址:https://www.cnblogs.com/caijiaming/p/12632281.html
Copyright © 2011-2022 走看看