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;
    }
    
    • 1
      @ 2024-4-23 22:41:16

      #include<bits/stdc++.h> using namespace std;

      struct node{ int x,y; bool flag; }a[1005];

      double f(int x,int y,int z,int w){ return sqrt(((x-z)(x-z)+(y-w)(y-w))*1.0); } int n,k,t,res; int main(){ cin>>n>>k>>t; for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y; for(int i=1;i<=k;i++) { int x,y; cin>>x>>y; for(int j=1;j<=n;j++) if(a[j].xx && a[j].yy) { a[j].flag=true; break; } } for(int i=1;i<=t;i++) { int x,y,ans; double maxl=-1; cin>>x>>y; for(int j=1;j<=n;j++) if(f(x,y,a[j].x,a[j].y)>maxl) ans=j,maxl=f(x,y,a[j].x,a[j].y); if(a[ans].flag) res++; } cout<<res; return 0; }

      • 0
        @ 2024-7-6 21:47:44
        #include<bits/stdc++.h> using namespace std;
        
        struct node{ int x,y; bool flag; }a[1005];
        
        double f(int x,int y,int z,int w){ return sqrt(((x-z)​*(x-z)+(y-w)*​(y-w))\*1.0); } int n,k,t,res; int main(){ cin>>n>>k>>t; for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y; for(int i=1;i<=k;i++) { int x,y; cin>>x>>y; for(int j=1;j<=n;j++) if(a[j].x==x && a[j].y==y) { a[j].flag=true; break; } } for(int i=1;i<=t;i++) { int x,y,ans; double maxl=-1; cin>>x>>y; for(int j=1;j<=n;j++) if(f(x,y,a[j].x,a[j].y)>maxl) ans=j,maxl=f(x,y,a[j].x,a[j].y); if(a[ans].flag) res++; } cout<<res; return 0; }
        
        • 1

        信息

        ID
        191
        时间
        1000ms
        内存
        256MiB
        难度
        7
        标签
        递交数
        51
        已通过
        13
        上传者