还有什么可以优化的吗
查看原帖
还有什么可以优化的吗
828664
Llx2022楼主2023/3/25 18:38
#include<bits/stdc++.h>
using namespace std;
double ene[1009][4];
double buil[19][4];
double ans=0;
double n,m,r;
double dis(double x, double y, double xx, double yy){
    return sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy));
}
double rand(double l,double r){
	return (double)rand()/RAND_MAX*(r-l)+l;
}
double calc(double x, double y){
    double res=0,d=r;
    for(int i=1;i<=n;i++){
    	d=min(d,dis(x,y,buil[i][0],buil[i][1])-buil[i][2]);
    }
    for(int i=1;i<=m;i++){
    	double a=dis(x,y,ene[i][0],ene[i][1]);
    	if(a<=d){
    		res++;
		} 
	}
    ans=max(ans,res);
    return res;
}
double ax=0,ay=0;
void simulate_anneal(){
	double x=ax/m,y=ay/m;
	for(double t=2605;t>=1e-12;t*=0.9982){
		double xx = x + ((rand() << 1) - RAND_MAX)*t;
        double yy = y + ((rand() << 1) - RAND_MAX)*t;
		double dt=calc(xx,yy)-ans;
		if(dt>0) x=xx,y=yy;
		else if(exp(-dt/t)<(double)rand()/RAND_MAX) x=xx,y=yy; 
//		if(exp(-dt/t)<rand(0,1)) x=xx,y=yy;
	}
}
int main(){
//	srand(time(0));
	scanf("%lf%lf%lf",&n,&m,&r);
	for(int i=1;i<=n;i++){
		scanf("%lf%lf%lf",&buil[i][0],&buil[i][1],&buil[i][2]);
	}
	for(int i=1;i<=m;i++){
		scanf("%lf%lf",&ene[i][0],&ene[i][1]);
		ax+=ene[i][0],ay+=ene[i][1];
	}
	for(int i=1;i<=4;i++){
		simulate_anneal();
	}
	printf("%.0lf",ans);
	return 0;
} 
2023/3/25 18:38
加载中...