zoukankan      html  css  js  c++  java
  • 解题:PA 2014 Bohater

    题面

    我们把怪分成两类,打完了了能回血的和打完了不能回血的,然后分开打。

    对于能回血的,我们先打攻击力低的,因为如果先打一个攻击力高的显然不一定能直接打过,所以先打一些攻击力低的回回血。

    对于不能回血的,我们先打回血多的,因为如果能打完我们最后的血量是确定的,所以逆序来看相当于每次丢掉打怪回的血再加上打怪耗的血,这就和前面一样了。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int N=100005;
     6 struct a
     7 {
     8     int id;
     9     long long atk,hpp;
    10 }mon1[N],mon2[N];
    11 long long hp,t1,t2;
    12 int n,c1,c2,outp[N];
    13 bool cmp1(a x,a y)
    14 {
    15     return x.atk==y.atk?x.hpp>y.hpp:x.atk<y.atk;
    16 }
    17 bool cmp2(a x,a y)
    18 {
    19     return x.hpp==y.hpp?x.atk<y.atk:x.hpp>y.hpp;
    20 }
    21 int main ()
    22 {
    23     scanf("%d%lld",&n,&hp);
    24     for(int i=1;i<=n;i++)
    25     {
    26         scanf("%lld%lld",&t1,&t2);
    27         if(t1<t2) mon1[++c1].atk=t1,mon1[c1].hpp=t2,mon1[c1].id=i;
    28         else mon2[++c2].atk=t1,mon2[c2].hpp=t2,mon2[c2].id=i; 
    29     }
    30     sort(mon1+1,mon1+1+c1,cmp1),sort(mon2+1,mon2+1+c2,cmp2);
    31     for(int i=1;i<=c1;i++)
    32     {
    33         if(hp<=mon1[i].atk) printf("NIE"),exit(0);
    34         hp+=mon1[i].hpp-mon1[i].atk,outp[++outp[0]]=mon1[i].id; 
    35     }
    36     for(int i=1;i<=c2;i++)
    37     {
    38         if(hp<=mon2[i].atk) printf("NIE"),exit(0);
    39         hp+=mon2[i].hpp-mon2[i].atk,outp[++outp[0]]=mon2[i].id;
    40     }
    41     printf("TAK
    ");
    42     for(int i=1;i<=n;i++) printf("%d ",outp[i]);
    43     return 0;
    44 }
    45 
    View Code
  • 相关阅读:
    §6 矢量在轴上的投影(射影)
    3§5 点与直线的位置关系
    第十八章 机械振动基础
    第五章摩擦平衡问题
    矩阵论基础 3.4线性方程组的解
    第三章 平面与空间直线
    第九章点的复合运动
    §3 两平面的相关位置
    3§7 直线与平面的位置关系
    第十七章 碰撞
  • 原文地址:https://www.cnblogs.com/ydnhaha/p/9809081.html
Copyright © 2011-2022 走看看