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

    Description:

    在一款电脑游戏中,你需要打败n只怪物(从1到n编号)。为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值。任何时候你的生命值都不能降到0(或0以下)。请问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉

    Analysis:

    貪心,先打好的怪物(能給自己加血的),再打壞的怪物(減血的)。
    排序時:好的按照掉血量遞增,壞的按照增血量遞減。
    鏡像?
    你離AC只差一個 long long Orz。。

    Code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int N =  100100;
    struct monster{
    	int id,d,a,fetag;
    	bool operator < (const monster & p) const {
    		if(fetag == p.fetag) {
    			return (fetag ? (d < p.d) : (a > p.a));
    		}
    		return fetag > p.fetag;
    	}
    }m[N];
    long long n,z;
    bool C()
    {
    	for(int i = 1;i <= n;++i)
    	{
    		z -= m[i].d;
    		if(z <= 0){
    			return false;
    		}
    		z += m[i].a;
    	}
    	return true;
    }
    int main()
    {
    	while(scanf("%d%lld",&n,&z) != EOF)
    	{
    		for(int i = 1;i <= n;++i)
    		{
    			scanf("%d%d",&m[i].d,&m[i].a);
    			m[i].id = i;
    			m[i].fetag = (m[i].a - m[i].d > 0);
    		}
    		sort(m+1,m+1+n);	
    		if(C()){
    			printf("TAK
    ");
    			for(int i = 1;i <= n;++i) printf("%d%c",m[i].id,i == n ? '
    ':' ');
    		}
    		else{
    			printf("NIE
    ");
    		}
    	}
    	return 0;
    }
    
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    Ubuntu出现无法定位软件包,更换源
    VScode支持Python
    Tp3.2 组合查询
    PHP 年月日,转为标准时间
    常用查询之按时间范围查询,按名称查询
    微信发起支付步骤
    拷贝 最近 一段时间生成的文件
    获取调查问卷统计
    Tp3.2 实现一个字段的或查询
    MFC DDX_Control 与 DDX_Text
  • 原文地址:https://www.cnblogs.com/Zforw/p/11384918.html
Copyright © 2011-2022 走看看