3 条题解

  • 4
    @ 2023-7-25 8:27:30

    由于题目中说要找最远且编号小的那个,所以这题需要用排序,筛选出离追踪者最远又是编号最小的传送阵。

    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    float _long(int x,int y,int x1,int y1){
    	return sqrt(pow(fabs(x-x1),2)+pow(fabs(y-y1),2));
    }//求两点之间的距离
    struct jtm{
    	int num;
    	int x,y;
    };
    struct mx{
    	int name,x,y;
    	float ma;
    };
    bool jntm(mx x,mx y){
    	if(x.ma==y.ma){
    		return x.name<y.name;
    	}
    	return x.ma>y.ma;
    }//排序
    int main(){
    	int n,k,j,ans=0;
    	cin>>n>>k>>j;
    	jtm man[k],po[j];
    	jtm door[n];
    	for(int t=0;t<n;t++){
    		cin>>door[t].x>>door[t].y;
    		door[t].num=t;
    	}
    	for(int t=0;t<k;t++){
    		cin>>man[t].x>>man[t].y;
    		man[t].num=t;
    	}
    	for(int t=0;t<j;t++){
    		cin>>po[t].x>>po[t].y;
    	}
    	mx na[n];
    	for(int t=0;t<j;t++){
    		for(int i=0;i<n;i++){
    			na[i].ma=_long(door[i].x,door[i].y,po[t].x,po[t].y);
    			na[i].name=i;
    			na[i].x=door[i].x;
    			na[i].y=door[i].y;
    		}//记录距离、编号和坐标
    		sort(na,na+n,jntm);
    		for(int i=0;i<k;i++){
    			if(na[0].x==man[i].x&&na[0].y==man[i].y){
    				ans++;
    				break;
    			}
    		}
    	}
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    191
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    54
    已通过
    15
    上传者