zoukankan      html  css  js  c++  java
  • 笨小猴(思维题)

    OvO

    把所有的(2n+1)张牌按照(a)排序,然后去掉最大的一张,从每两个一对里选择一个(b)较大的,最后再加上最大的那个即可。
    至于正确性,就算最坏是每一对里都选择了(a)小的那张。比如有(5)张,然后排完序最大的是(1).(2,3)配对,(4,5)配对。最后选了(5,3).但是这样的话,按照(1,2)配对,(3,4)配对去看,会发现依旧是选的(a)总和更大。所以可行。

    #include<cstdio>
    #include<cstring>
    #include<algorithm> 
    using namespace std;
    const int maxn=1e5+1;
    int n;
    struct E{int a,b,id;}x[maxn<<2];
    bool Cmp1(E u,E v){return u.a>v.a;} 
    signed main(){
        freopen("grandmaster.in","r",stdin);
        freopen("grandmaster.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n*2+1;i++){
            scanf("%d%d",&x[i].a,&x[i].b);
            x[i].id=i;
        }
        sort(x+1,x+n*2+1+1,Cmp1); 
        for(int i=2;i<=2*n+1;i+=2){
            if(x[i].b>x[i+1].b)printf("%d
    ",x[i].id);
            else printf("%d
    ",x[i+1].id);
        }
        printf("%d
    ",x[1].id);
        return 0;
    }
    
  • 相关阅读:
    Orleans 2 实例
    Linux基础1 目录和文件系统
    C#中的异步多线程补充1
    委托的小例子(基本委托,匿名方法,lambda)
    Orleans 1 基本概念
    WPF10 Binding-2
    WPF9 Binding-1
    WPF8 UI布局
    WPF7 布局控件
    软工总结
  • 原文地址:https://www.cnblogs.com/13ZY/p/13805637.html
Copyright © 2011-2022 走看看