是参数的问题还是sb错误?
max=20pts
谢谢。
#include <bits/stdc++.h>
#define R register
#define inl inline
#define fastios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define Debug(file) freopen(file".in","r",stdin);freopen(file".out","w",stdout);
#define random_int uniform_int_distribution<int>
#define random_real uniform_real_distribution<double>
#define delta_T 0.9999
using namespace std;
mt19937 maker(time(NULL));
int n,m;double maxR;
int answer,bestans;
struct building{
double x,y,r;
}a[12];
struct person{
double x,y;
}b[1005],ans,best;
typedef person point;
double dist(point p1,point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
double maxr(double x,double y){
double res = maxR;
for(int i = 1;i <= n;i ++)res = min(res,dist(point{x,y},point{a[i].x,a[i].y})-a[i].r);
return res;
}
int f(double x,double y,double r){
int res = 0;
for(int i = 1;i <= m;i ++)if(dist(point{x,y},b[i]) <= r)res ++;
return res;
}
void SA(){
// puts("done");
random_int delta(-32767,+32767);
random_real cen(0,1);
double T = 20060;
while(T >= 1e-18){
point cpy = ans;
ans.x += delta(maker)*T;
ans.y += delta(maker)*T;
int now = f(ans.x,ans.y,maxr(ans.x,ans.y));
int delta = answer-now ;
if(delta < 0)answer = now;
else if(exp(-delta/T)<cen(maker))answer = now;
else ans = cpy;
T *= delta_T;
if(answer > bestans){
bestans = answer;best = ans;
}
}
}
int main() {
maker = mt19937(maker());
maker = mt19937(maker());
maker = mt19937(maker());
maker = mt19937(maker());
cin >> n >> m >> maxR;double sx,sy;sx = sy = 0;
for(int i = 1;i <= n;i ++)cin >> a[i].x >> a[i].y >> a[i].r;
for(int i = 1;i <= m;i ++){
cin >> b[i].x >> b[i].y;
sx += b[i].x;
sy += b[i].y;
}
ans = best = {sx/(double)m,sy/(double)m};
// cout << ans.x << " " <<ans.y <<endl;
answer = bestans = f(ans.x,ans.y,maxr(ans.x,ans.y));
#ifdef ONLINE_JUDGE
while((double)clock()/CLOCKS_PER_SEC<=0.95)SA();
#endif
#ifdef Local
SA();SA();SA();SA();SA();SA();SA();SA();SA();
#endif
cout << bestans << endl;
return 0;
}