zoukankan      html  css  js  c++  java
  • bzoj3709: [PA2014]Bohater

    你能感受搞了一个星期文化课然后爆炸螺旋升天法力不无边准备被D飞回去继续搞文化课怀念OI水一波贪心然而还是被lxj带飞只会%%%%的lj编程爱好者终于摸了下键盘然后A了一题抬头一看发现肉老师又虐我20题的绝望吗??!

    这题是个巧妙的贪心

    然而它AC率低的原因是scanf输入竟然毒瘤般CE硬逼着人家学了个读入优化输入只有1000000的HP值竟然在后期可以奶爆LL还有就是我也不知道为啥我排序用了个bcmp然后居然又会CE这是人性的险恶还是道德的沦丧???!

    怎么贪呢首先分两种情况打完能够加血的当然是先打了这个按先弱小后强大来虐如果虐不动后面肯定也虐不动所以这样直接NIE就行

    打完不能加血我们就按谁奶得多先打谁为什么呢因为反正假如能活下来个个都得打死然而前期奶得越多当然撑得越久那么你就问了假如一个超级大胖子打死了奶得很多但是打不死那我先打它岂不是很吃亏但是你想一想你这个超级大胖子现在打不死以后肯定也完因为血药奶得没有掉血快

    然而ACM赛制使得我可以把两个排序都试一遍

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    
    struct node
    {
        int a,d,id;
    }h[110000],b[110000];int hlen,blen;
    bool cmp1(node n1,node n2){return n1.d<n2.d;}
    bool cmp2(node n1,node n2){return n1.a>n2.a;}
    
    int as[110000],aslen;
    int main()
    {
        int n,a,d;LL z;
        n=read();z=(LL(read()));
        hlen=0;blen=0;
        int nmin=999999999,nid;
        for(int i=1;i<=n;i++)
        {
            d=read();a=read();
            if(a-d>0)h[++hlen].a=a,h[hlen].d=d,h[hlen].id=i;
            else 
            {
                b[++blen].a=a,b[blen].d=d,b[blen].id=i;
                if(a<nmin)nmin=a,nid=blen;
            }
        }
        sort(h+1,h+hlen+1,cmp1);
        
        aslen=0;
        for(int i=1;i<=hlen;i++)
        {
            if(z<=h[i].d)
            {
                printf("NIE
    ");
                return 0;
            }
            z-=h[i].d;
            z+=h[i].a;
            as[++aslen]=h[i].id;
        }
        for(int i=1;i<=blen;i++)
        {
            if(i==nid)continue;
            if(z<=b[i].d)
            {
                printf("NIE
    ");
                return 0;
            }
            z-=b[i].d;
            z+=b[i].a;
            as[++aslen]=b[i].id;
        }
        if(z<b[nid].a)printf("NIE
    ");
        else
        {
            printf("TAK
    ");
            for(int i=1;i<=aslen;i++)printf("%d ",as[i]);
            printf("%d
    ",b[nid].id);
        }
        return 0;
    }
  • 相关阅读:
    Educational Codeforces Round 13
    Educational Codeforces Round 12
    vscode 修改标签栏样式为换行全部展示
    webpack uglifyjs 报错 Unexpected token name
    tsconfig.js 使用 paths 设置alias无效问题
    Webpack 报错 filename.indexOf is not a function 的问题
    'GL_EXT_shader_framebuffer_fetch' : extension is not supported
    Flutter命令突然无响应、vscode突然无法连接到IOS模拟器
    解决node fs.writeFile 生成csv 文件乱码问题
    数组map方法与如何使用ES5实现
  • 原文地址:https://www.cnblogs.com/AKCqhzdy/p/8781098.html
Copyright © 2011-2022 走看看