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;
    }
    
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/Zforw/p/11384918.html
Copyright © 2011-2022 走看看