关于simulate_anneal的疑惑
查看原帖
关于simulate_anneal的疑惑
572587
cmrhhh楼主2024/7/4 16:03

这是my_code的质量

这是我的代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e4+10;
using ll=long long;
int N,M,R,ans=0;
int x[maxn],y[maxn],r[maxn],x_[maxn],y_[maxn];
double sx,sy,sr;
double dis(double X1,double Y1,double X2,double Y2){
	double dx=X1-X2,dy=Y1-Y2;
	return sqrt(dx*dx+dy*dy);
}
double check(double nx,double ny){
	double res=(double)R;
	for(int i=1;i<=N;++i)res=min(res,dis(nx,ny,x[i],y[i])-r[i]);
	return res;
}
int calc(double nx,double ny,double nr){
	if(nr<0)return 0;
	int res=0;
	for(int i=1;i<=M;++i)
		if(dis(nx,ny,x_[i],y_[i])<=nr)res++;
	ans=max(ans,res);
	return res;
}
void simulate_anneal(){
	double nx,ny;
	int tot=0;
	for(double t=1e2;t>1e-9;t*=0.993){
		nx=sx+(double)(rand()*2-RAND_MAX)*t;
		ny=sy+(double)(rand()*2-RAND_MAX)*t;
		int sum=calc(nx,ny,check(nx,ny));
		int d=tot-sum;
		if(d<0){
			sx=nx;
			sy=ny;
			tot=sum;
          	ans=max(ans,tot);
		}
		else if(exp((-d/t))>(double)rand()){
			sx=nx;
			sy=ny;
			tot=sum;
		}
	}
}

	
int main(){
	srand(time(NULL));
	srand(rand()+20090302);
	srand(20090302);
	ios::sync_with_stdio(0),cin.tie(0);
	cin>>N>>M>>R;
	for(int i=1;i<=N;++i)cin>>x[i]>>y[i]>>r[i];
	for(int i=1;i<=M;++i)cin>>x_[i]>>y_[i],sx+=x_[i],sy+=y_[i];
	sx/=M,sy/=M; 
	for(int i=1;i<=8;++i)simulate_anneal();
	cout<<ans;
	return 0;
}

问题是:分析39行(瞎写的东西)语句可行性?蒟蒻懵懵着AC了qwq

2024/7/4 16:03
加载中...