6来飞起
图片的i=j?下面第二个应该为temp = temp / (xi - xj);
#include "cstdio"
const int MAXN = (int) 1e5 + 5;
struct point {
double x, y;
} list[MAXN];
int n, m;
double x;
double Lagrange( point *list, int qnum, double x ) {
double rt = 0, tmp = 1.0;
for(int i = 1; i <= qnum; rt += list[i].y * tmp, tmp = 1.0, ++i)
for(int j = 1; j <= qnum; ++j)
if(i != j)
tmp *= (x - list[j].x) / (list[i].x - list[j].x);
return rt;
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; scanf("%lf%lf", &list[i].x, &list[i].y), ++i);
scanf("%d", &m);
while( m-- )
scanf("%lf", &x), printf("%lf\n", Lagrange(list, n, x));
}
感觉自己学了假的OI, 姚班大神虐蒟蒻~
大家都很强, 可与之共勉。
2017.3.18