题意 在游戏中你的dps为1但是hp无限 给出n个敌人的dps与hp 你一秒能打掉一个敌人你的dps的hp 当你输出的时候 所有活着的敌人都会打你 求杀死所有敌人时你掉的最少hp
一开始想错了 排序的时候先处理了dps更高的 然后wa
即使在游戏中这也是很傻的..
应该处理dps/hp更高的 如果放在游戏里讲应该是先杀输出能力高的...
如果直接return a.dps/a.hp>b.dps/b.hp会出现小数
所以用 return a.dps*b.hp>b.dps*a.hp
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; struct node { long long int dps; long long int hp; }; node a[25]; int cmp(node a,node b) { return a.dps*b.hp>b.dps*a.hp; } int main(){ int n; while(~scanf("%d",&n)) { long long int sum=0; for(int i=1;i<=n;i++) { scanf("%I64d%I64d",&a[i].dps,&a[i].hp); sum+=a[i].dps; } sort(a+1,a+1+n,cmp); long long int ans=0; for(int i=1;i<=n;i++) { ans+=sum*a[i].hp; sum-=a[i].dps; } printf("%I64d ",ans); } }