QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#201181 | #7344. Those Russian Hackers | SolitaryDream | WA | 9ms | 20408kb | C++14 | 2.6kb | 2023-10-05 12:57:23 | 2023-10-05 12:57:24 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define FOR(i,s,t) for(int i=(s),_t=(t); i<=_t; ++i)
typedef long double db;
typedef long long ll;
const int N=1.1e6+50;
typedef complex<db> comp;
const db pi=acos(-1);
void DFT(comp *a,int n,int f) {
static comp ww[N],iw[N];
static int rev[N],pn=0;
if(pn!=n) {
FOR(i,0,n-1) ww[i]=comp(cos(pi*2/n*i),sin(pi*2/n*i));
FOR(i,0,n-1) iw[i]=conj(ww[i]);
FOR(i,0,n-1) rev[i]=(rev[i>>1]>>1)|((i&1)*(n>>1));
pn=n;
}
comp *w=f>0?ww:iw;
FOR(i,0,n-1) if(rev[i]<i) swap(a[rev[i]],a[i]);
for(int l=2; l<=n; l<<=1) {
for(comp *p=a; p!=a+n; p+=l) {
for(int i=0,m=l>>1; i<m; ++i) {
comp t=p[i+m];
p[i+m]=p[i]+t*w[n/l*(i+m)];
p[i]=p[i]+t*w[n/l*i];
}
}
}
if(f<0) FOR(i,0,n-1) a[i]/=n;
}
void Poly_Mul(const db *A,int LenA,const db *B,int LenB,db *C) {
// FOR(i,0,LenA-1) FOR(j,0,LenB-1) C[i+j]+=A[i]*B[j];
static comp a[N],b[N];
int n=1;for(; n<LenA+LenB; n<<=1);
FOR(i,0,n-1) a[i]=b[i]={0,0};
FOR(i,0,LenA-1) a[i]={A[i],0};
FOR(i,0,LenB-1) b[i]={B[i],0};
DFT(a,n,1);
DFT(b,n,1);
FOR(i,0,n-1) b[i]*=a[i];
// FOR(i,0,n-1) b[i]=(a[i]*a[i]-conj(a[i?n-i:0]*a[i?n-i:0]))*comp(0,-0.25);
DFT(b,n,-1);
FOR(i,0,n-1) C[i]=b[i].real();
}
db p[N],q[N];
db Q[N];
db A[N],B[N];
db sum[N];
int n,K;
db pr;
int e=0;
db qry(int i,int r) {
db t=0,t0=0,t1=0;
FOR(j,1,n) {
if(j<=r) {
if(i==1) {
t+=Q[n-j]*p[j];
} else {
t+=p[j]*(sum[n*3-2]-sum[n-1+j]);
}
} else {
t0+=p[j]*pr;
t1+=p[j]*Q[j-r-1];
}
}
return t+max(t0,t1);
}
int main() {
scanf("%d%d",&n,&K);
FOR(i,1,n) scanf("%Lf",&p[i]);
FOR(i,1,n*2-2) scanf("%Lf",&q[i]),Q[i]=Q[i-1]+q[i];
FOR(i,1,n*2-2) A[i]=q[n*2-1-i];
Poly_Mul(p,n+1,A,n*2-1,B);
FOR(i,1,n+n*2-2) sum[i]=sum[i-1]+B[i];
int r=0;
db s=0,w=0;
s=qry(1,0);
w=s;
FOR(j,1,n) {
s=qry(1,j);
if(s>=w) {
w=s;
r=j;
}
}
pr=w;
while(e<n && Q[e+1]<=pr) ++e;
r=n;
FOR(i,2,K) {
db w=qry(i,r);
while(r>0) {
--r;
db t=qry(i,r);
if(t<=w) {
++r;
break;
}
w=t;
}
pr=w;
while(e<n && Q[e+1]<=pr) ++e;
}
printf("%.9Lf\n",pr);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 20308kb
input:
3 1 0.5 0.25 0.25 0.75 0.25 0.0 0.0
output:
0.687500000
result:
ok found '0.6875000', expected '0.6875000', error '0.0000000'
Test #2:
score: 0
Accepted
time: 3ms
memory: 20372kb
input:
3 2 0.3 0.4 0.3 0.0 0.0 0.0 1.0
output:
0.090000000
result:
ok found '0.0900000', expected '0.0900000', error '0.0000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 20320kb
input:
3 1 0.5 0.2 0.3 1.0 0.0 0.0 0.0
output:
0.800000000
result:
ok found '0.8000000', expected '0.8000000', error '0.0000000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 20316kb
input:
2 1 1.0 0.0 0.7 0.3
output:
0.700000000
result:
ok found '0.7000000', expected '0.7000000', error '0.0000000'
Test #5:
score: 0
Accepted
time: 0ms
memory: 20312kb
input:
2 2 0.0 1.0 0.6 0.4
output:
0.600000000
result:
ok found '0.6000000', expected '0.6000000', error '0.0000000'
Test #6:
score: 0
Accepted
time: 0ms
memory: 20308kb
input:
3 1 0.1 0.1 0.8 1.0 0.0 0.0 0.0
output:
0.900000000
result:
ok found '0.9000000', expected '0.9000000', error '0.0000000'
Test #7:
score: 0
Accepted
time: 0ms
memory: 20364kb
input:
2 1 0.196570 0.803430 0.417660 0.582340
output:
0.335560574
result:
ok found '0.3355606', expected '0.3355606', error '0.0000000'
Test #8:
score: 0
Accepted
time: 2ms
memory: 20244kb
input:
2 1 0.392496 0.607504 1.000000 0.000000
output:
0.607504000
result:
ok found '0.6075040', expected '0.6075040', error '0.0000000'
Test #9:
score: 0
Accepted
time: 0ms
memory: 20316kb
input:
10 1 0.012643 0.123624 0.053820 0.040365 0.028873 0.020157 0.055711 0.484945 0.098421 0.081441 0.085328 0.047990 0.714931 0.138813 0.012938 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
output:
0.901027548
result:
ok found '0.9010275', expected '0.9010275', error '0.0000000'
Test #10:
score: 0
Accepted
time: 3ms
memory: 20316kb
input:
10 1 0.006649 0.073200 0.000565 0.045068 0.112668 0.035625 0.046072 0.103194 0.005569 0.571390 0.195573 0.074055 0.047683 0.369439 0.161507 0.054811 0.055588 0.037380 0.003964 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
output:
0.853833381
result:
ok found '0.8538334', expected '0.8538334', error '0.0000000'
Test #11:
score: 0
Accepted
time: 0ms
memory: 20316kb
input:
10 1 0.145228 0.019318 0.105821 0.185187 0.088991 0.042625 0.024569 0.088478 0.047174 0.252609 0.018498 0.107130 0.001316 0.120833 0.069263 0.099338 0.005632 0.009075 0.036279 0.023135 0.008573 0.029578 0.025695 0.067194 0.023536 0.116172 0.157449 0.081304
output:
0.306330007
result:
ok found '0.3063300', expected '0.3063300', error '0.0000000'
Test #12:
score: 0
Accepted
time: 3ms
memory: 20296kb
input:
10 10 0.044299 0.160436 0.044139 0.088241 0.291281 0.136777 0.020766 0.124310 0.013255 0.076496 0.081824 0.025457 0.068874 0.265701 0.558144 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
output:
0.999983854
result:
ok found '0.9999839', expected '0.9999839', error '0.0000000'
Test #13:
score: 0
Accepted
time: 0ms
memory: 20316kb
input:
10 10 0.098756 0.001607 0.002767 0.264946 0.282086 0.080842 0.027809 0.031328 0.176685 0.033174 0.072398 0.177002 0.005668 0.017867 0.488488 0.060093 0.085645 0.025416 0.067423 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
output:
0.986428786
result:
ok found '0.9864288', expected '0.9864288', error '0.0000000'
Test #14:
score: 0
Accepted
time: 0ms
memory: 20368kb
input:
10 10 0.429937 0.091639 0.001306 0.006129 0.006155 0.171890 0.227093 0.040566 0.003681 0.021604 0.041201 0.062705 0.028561 0.106362 0.004036 0.034025 0.097426 0.071704 0.050975 0.005562 0.042348 0.065488 0.055791 0.033996 0.101538 0.032639 0.105819 0.059824
output:
0.628303052
result:
ok found '0.6283031', expected '0.6283031', error '0.0000000'
Test #15:
score: 0
Accepted
time: 7ms
memory: 20408kb
input:
1000 1000 0.000186 0.000277 0.000747 0.004770 0.001251 0.001097 0.001523 0.000697 0.002943 0.000903 0.000046 0.000063 0.000033 0.000233 0.000333 0.000385 0.000192 0.001261 0.002266 0.000046 0.001039 0.001668 0.000955 0.002996 0.000001 0.000635 0.001404 0.000237 0.000757 0.000273 0.001566 0.000076 0....
output:
1.000000000
result:
ok found '1.0000000', expected '1.0000000', error '0.0000000'
Test #16:
score: 0
Accepted
time: 9ms
memory: 20292kb
input:
1000 1000 0.000547 0.000752 0.000703 0.001254 0.003381 0.000643 0.002170 0.000597 0.001286 0.005326 0.000228 0.000866 0.002296 0.000276 0.001162 0.000225 0.001080 0.002429 0.001119 0.001858 0.001548 0.000080 0.002263 0.000292 0.000358 0.000841 0.000658 0.001286 0.002226 0.004054 0.000382 0.001406 0....
output:
0.999998043
result:
ok found '0.9999980', expected '0.9999980', error '0.0000000'
Test #17:
score: -100
Wrong Answer
time: 7ms
memory: 20396kb
input:
1000 1000 0.000362 0.001464 0.000148 0.000631 0.000095 0.000870 0.000089 0.000110 0.000545 0.000621 0.001660 0.000251 0.000261 0.001025 0.001456 0.002287 0.000990 0.001421 0.000920 0.001709 0.002256 0.002731 0.000697 0.002399 0.003296 0.000171 0.000584 0.000437 0.001456 0.000772 0.000126 0.000171 0....
output:
0.522618069
result:
wrong answer 1st numbers differ - expected: '0.7581921', found: '0.5226181', error = '0.2355740'