QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#526059 | #5667. Meeting Places | solar_express# | WA | 0ms | 10120kb | C++14 | 2.6kb | 2024-08-21 10:30:05 | 2024-08-21 10:30:05 |
Judging History
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'