QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#526059#5667. Meeting Placessolar_express#WA 0ms10120kbC++142.6kb2024-08-21 10:30:052024-08-21 10:30:05

Judging History

你现在查看的是最新测评结果

  • [2024-08-21 10:30:05]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:10120kb
  • [2024-08-21 10:30:05]
  • 提交

answer

#include<bits/stdc++.h>
#define N 1005
#define db double
using namespace std;
const double eps=1e-12;
int n,K;
struct point{
	double x,y;
}a[N];
double dis(point p,point q){
	double x=p.x-q.x,y=p.y-q.y;
	return sqrt(x*x+y*y);
}
point circle_center(point a,point b,point c){
	double x1=a.x,x2=b.x,x3=c.x;
	double y1=a.y,y2=b.y,y3=c.y;
	double A=x1*x1+y1*y1,B=x2*x2+y2*y2,C=x3*x3+y3*y3;
	double u1=x1-x2,u2=x1-x3,u3=x2-x3;
	double v1=y1-y2,v2=y1-y3,v3=y2-y3;
	point o;
	o.y=((C-A)*u1-(B-A)*u2)/(2*v1*u2-2*v2*u1);
	o.x=((C-A)*v1-(B-A)*v2)/(2*u1*v2-2*u2*v1);
	return o;
}
int gen(int x){
    return (1ll*x*233811181+1)%(2147483647);
}
db cst[N][N];
db f[N];
int st[N];
db g[N][N];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>K>>a[1].x;
    for(int i=1;i<=n;++i){
        if(i>=2) a[i].x=gen(a[i-1].y);
        a[i].y=gen(a[i].x);
    }
    for(int bg=1;bg<=n;++bg){
        point o=a[bg];
        db r=0;
        cst[bg][bg]=r;
        for(int i=bg+1;i<=n;++i){
            if(dis(o,a[i])-r>eps){
                o=a[i],r=0;
                for(int j=bg;j<i;++j)
                    if(dis(o,a[j])-r>eps){
                        o.x=(a[i].x+a[j].x)/2.0;
                        o.y=(a[i].x+a[j].y)/2.0;
                        r=dis(o,a[j]);
                        for(int k=bg;k<j;++k)
                            if(dis(o,a[k])-r>eps){
                                o=circle_center(a[i],a[j],a[k]);
                                r=dis(o,a[k]);
                            }
                    }
            }
            cst[bg][i]=r;
        }
    }
    // for(int i=1;i<=n;++i){
    //     for(int j=i;j<=n;++j)
    //         cerr<<cst[i][j]<<" \n"[j==n];
    // }
    // db L=-1e10,R=1e10;
    // cerr<<L<<" "<<R<<endl;
    // for(int t=1;t<=100;++t){
    //     db mid=(L+R)/2.0;
    //     f[0]=0;
    //     st[0]=0;
    //     for(int i=1;i<=n;++i){
    //         f[i]=1e18;
    //         for(int j=0;j<i;++j)
    //             if(f[i]>f[j]+cst[j+1][i]+mid)
    //                 f[i]=f[j]+cst[j+1][i]+mid,st[i]=st[j]+1;
    //     }
    //     if(st[n]>K) L=mid;
    //     if(st[n]==K){
    //         cout<<f[n]-mid*K<<'\n';
    //         return 0;
    //     }
    //     if(st[n]<K) R=mid;   
    //     cerr<<mid<<" "<<st[n]<<endl;    
    // }
    for(int i=0;i<=n;++i)
        for(int j=0;j<=K;++j) 
            g[i][j]=1e18;
    g[0][0]=0.0;
    for(int i=1;i<=n;++i)
        for(int j=0;j<i;++j)
            for(int k=1;k<=K;++k)
                g[i][k]=min(g[i][k],g[j][k-1]+cst[j+1][i]);
    cout<<setprecision(20)<<g[n][K]<<'\n';
    return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 10120kb

input:

100 23 213

output:

1319351863.5050327778

result:

wrong answer 1st numbers differ - expected: '1319350480.8007326', found: '1319351863.5050328', error = '0.0000010'