AC:
void SA()
{
double T=500;
double x=xs,y=ys;
while(T>=1e-18)
{
double ansx=x+((rand()<<1)-RAND_MAX)*T,ansy=y+((rand()<<1)-RAND_MAX)*T;
int d=ak(ansx,ansy),dt=d-ans;
if(dt>0)
ans=d,xs=x=ansx,ys=y=ansy;
T*=xp;//xp=0.997
}
}
WA:
void SA()
{
double T=500;
double x=xs,y=ys;
while(T>=1e-18)
{
double ansx=x+((rand()<<1)-RAND_MAX)*T,ansy=y+((rand()<<1)-RAND_MAX)*T;
int d=ak(ansx,ansy),dt=d-ans;
if(dt>0)
ans=d,xs=x=ansx,ys=y=ansy;
T*=xp;//xp=0.992
}
}
AC:
void SA()
{
double T=500;
double x=xs,y=ys;
while(T>=1e-18)
{
double ansx=x+((rand()<<1)-RAND_MAX)*T,ansy=y+((rand()<<1)-RAND_MAX)*T;
int d=ak(ansx,ansy),dt=d-ans;
if(dt>0)
ans=d,xs=x=ansx,ys=y=ansy;
else if(exp(-dt/T)*RAND_MAX<rand())
x=ansx,y=ansy;
T*=xp;//xp=0.992
}
}
所以
exp(-dt/T)*RAND_MAX<rand()
在何时成立?