H. Fight Against Monsters
题目链接
贪心求解,a.atk/a.time值较大的排在前边。但是这样使用除法会导致精度损失,compare函数中的比较规则变为a.atk*b.time>b.atk*a.time就行了。当相等的时候按照atk的大小进行排序就行。
(原先的时候想按照a.atk/a.hp值较大的排在前边,想了一下是不行的。因为hp不同的怪兽攻击的次数可能是一样的。)
代码:
#include
#include
using namespace std;
const int inf=1e5+7;
int cnt[2*inf];
struct node
{int hp;int atk; int time;
}arr[inf]; bool compare(node a,node b)
{ if( a.atk*b.time ==b.atk *a.time )return a.atk >b.atk ; else return a.atk*b.time > b.atk*a.time;
}int main( )
{int T,n;int kk=1,k=0;for(int i=1;i<=2*inf;i=i+(++kk)){while(++k<=i) // 7,8,9,10是四。 {cnt[k]=kk; //其中的k应该是生命值。 }k--;} /*for(int i=0;i<=100;i++)cout<
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
