救救孩子!

回复帖子

@浮梦若生 2018-11-09 14:15 回复

RT,调了一个上午的模拟退火炸了,全WA······

但样例是对的。

参考了几篇SA的题解感觉没什么差异,仍未找出错在哪里。

向巨佬们求助!

#include<bits/stdc++.h>
#define GC getchar
#define OUT printf
#define DURU scanf
#define HEHE while
#define FSORT sort
#define FPOWER pow
const double DELTA=0.995;
const double INF=1e15;
const int MAXS=20+5;
using namespace std;
double A[MAXS],L,R;int M;
double S=-INF,ANS;
double SOLVE(double X){
    double SUM=0;
    if(X<L || X>R)return -INF;
    for(register int I=M;I>=0;I--)
        SUM+=A[I]*FPOWER(X,I);
    return SUM;
}
void SA(){
    double X=ANS,T=1500;
    HEHE(T>1e-15){
        double TMP=ANS+((rand()<<1)-RAND_MAX)*T;
        double S0=SOLVE(TMP); 
        if(S0>S){X=TMP;ANS=X;S=S0;}
        else if(exp((S-S0)/T)*RAND_MAX>rand())
            X=TMP;
        T=T*DELTA;
    }
}
int main( ){
    DURU("%d%lf%lf",&M,&L,&R);
    for(register int I=0;I<=M;I++)
        DURU("%lf",&A[I]);
    SA(); SA(); SA();
    OUT("%.5lf",ANS);
    return 0;
}
反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。