HDU 4145 覆盖敌人最小成本

it2022-06-30  100

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4145

题目解析: 定义一个结构体存储敌人到两个塔的距离,按到塔A的距离排序,从塔A覆盖所有敌人开始遍历,直到塔A不覆盖敌人,算出各个情况下塔B的成本

#include<iostream> #include<algorithm> using namespace std; struct enemy{ int x,y,da,db; }p[100000],c1,c2; bool cmp(enemy a,enemy b){ return a.da<b.da; } int dist(enemy a,enemy b){ return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int main(){ int ncase; int num; int ans,res; cin>>ncase; while(ncase--){ cin>>c1.x>>c1.y>>c2.x>>c2.y; cin>>num; for(int i=0;i<num;i++){ cin>>p[i].x>>p[i].y; p[i].da=dist(c1,p[i]); p[i].db=dist(c2,p[i]); } sort(p,p+num,cmp); res=p[num-1].da; ans=0; for(int i=num-2;i>=0;i--){ ans=max(ans,p[i+1].db); res=min(res,ans+p[i].da); } ans=max(ans,p[0].db); res=min(res,ans); cout<<res<<endl; } }

最新回复(0)