QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#201997#7344. Those Russian HackersSolitaryDreamAC ✓413ms126884kbC++142.4kb2023-10-05 18:13:372023-10-05 18:13:38

Judging History

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

  • [2023-10-05 18:13:38]
  • 评测
  • 测评结果:AC
  • 用时:413ms
  • 内存:126884kb
  • [2023-10-05 18:13:37]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define FOR(i,s,t) for(int i=(s),_t=(t); i<=_t; ++i)
typedef 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],P[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) {
            t+=p[j]*(sum[n*3-2]-sum[n-2+j]);
        } else {
            t0+=p[j]*pr;
        }
    }
    return t+max(t0,t1);
}
db sum0[N];
int main() {
    scanf("%d%d",&n,&K);
    FOR(i,1,n) scanf("%lf",&p[i]),P[i]=P[i-1]+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-1) sum[i]=sum[i-1]+B[i];
    
    db s0=0,s1=sum[n*3-2]-sum[n*2-1];
    db s2=0;
    FOR(i,1,n) {
        sum0[i]=sum0[i-1]+p[i]*(sum[n*3-2]-sum[n-1+i]);

        s0+=Q[n-i]*p[i];
        s1=max(s1,s0+sum[n*3-2]-sum[n*2-1+i]);
        // cerr << s1 << endl;
    }
    pr=s1;
    int j=n;
    FOR(i,2,K) {
        while(j && pr>=(sum[n*3-2]-sum[n-1+j])) --j;
        pr=sum0[j]+pr*(P[n]-P[j]);
    }
    printf("%.9lf\n",pr);
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 22656kb

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: 0ms
memory: 22600kb

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: 3ms
memory: 22556kb

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: 22564kb

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: 22596kb

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: 3ms
memory: 22512kb

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: 22552kb

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: 0ms
memory: 22536kb

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: 22648kb

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: 0ms
memory: 22584kb

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: 3ms
memory: 22488kb

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: 0ms
memory: 22440kb

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: 3ms
memory: 22532kb

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: 22592kb

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: 3ms
memory: 22584kb

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: 0ms
memory: 22580kb

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: 0
Accepted
time: 0ms
memory: 24652kb

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.758192052

result:

ok found '0.7581921', expected '0.7581921', error '0.0000000'

Test #18:

score: 0
Accepted
time: 0ms
memory: 22460kb

input:

2 300000
0.044919 0.955081
1.000000 0.000000

output:

1.000000000

result:

ok found '1.0000000', expected '1.0000000', error '0.0000000'

Test #19:

score: 0
Accepted
time: 0ms
memory: 22592kb

input:

2 300000
0.922991 0.077009
0.216415 0.783585

output:

0.276758097

result:

ok found '0.2767581', expected '0.2767581', error '0.0000000'

Test #20:

score: 0
Accepted
time: 391ms
memory: 125420kb

input:

300000 1
0.000003 0.000000 0.000001 0.000003 0.000006 0.000001 0.000001 0.000001 0.000003 0.000003 0.000001 0.000003 0.000000 0.000005 0.000002 0.000001 0.000001 0.000002 0.000003 0.000002 0.000007 0.000000 0.000010 0.000000 0.000001 0.000000 0.000005 0.000009 0.000001 0.000002 0.000001 0.000006 0.0...

output:

0.500640853

result:

ok found '0.5006409', expected '0.5006409', error '0.0000000'

Test #21:

score: 0
Accepted
time: 384ms
memory: 123940kb

input:

300000 1
0.000007 0.000000 0.000003 0.000020 0.000001 0.000001 0.000000 0.000009 0.000000 0.000004 0.000000 0.000002 0.000001 0.000001 0.000002 0.000012 0.000001 0.000004 0.000001 0.000004 0.000003 0.000005 0.000013 0.000001 0.000002 0.000007 0.000001 0.000001 0.000005 0.000003 0.000001 0.000002 0.0...

output:

0.250560883

result:

ok found '0.2505609', expected '0.2505609', error '0.0000000'

Test #22:

score: 0
Accepted
time: 386ms
memory: 125832kb

input:

300000 10
0.000001 0.000001 0.000000 0.000000 0.000000 0.000001 0.000004 0.000001 0.000007 0.000004 0.000003 0.000002 0.000000 0.000004 0.000002 0.000001 0.000020 0.000001 0.000000 0.000003 0.000010 0.000001 0.000002 0.000013 0.000001 0.000007 0.000003 0.000006 0.000001 0.000001 0.000003 0.000001 0....

output:

0.979810413

result:

ok found '0.9798104', expected '0.9798104', error '0.0000000'

Test #23:

score: 0
Accepted
time: 391ms
memory: 124512kb

input:

300000 10
0.000002 0.000002 0.000000 0.000001 0.000001 0.000001 0.000001 0.000014 0.000000 0.000004 0.000001 0.000002 0.000006 0.000000 0.000002 0.000002 0.000005 0.000001 0.000000 0.000001 0.000000 0.000003 0.000000 0.000001 0.000002 0.000000 0.000007 0.000000 0.000003 0.000002 0.000001 0.000003 0....

output:

0.675031975

result:

ok found '0.6750320', expected '0.6750320', error '0.0000000'

Test #24:

score: 0
Accepted
time: 388ms
memory: 126884kb

input:

300000 100
0.000000 0.000002 0.000003 0.000007 0.000001 0.000004 0.000003 0.000000 0.000001 0.000000 0.000003 0.000001 0.000002 0.000000 0.000008 0.000002 0.000003 0.000002 0.000000 0.000004 0.000005 0.000004 0.000003 0.000004 0.000003 0.000001 0.000000 0.000005 0.000005 0.000003 0.000006 0.000002 0...

output:

0.999617531

result:

ok found '0.9996175', expected '0.9996175', error '0.0000000'

Test #25:

score: 0
Accepted
time: 413ms
memory: 126008kb

input:

300000 100
0.000000 0.000006 0.000000 0.000001 0.000001 0.000003 0.000005 0.000005 0.000004 0.000000 0.000004 0.000001 0.000001 0.000000 0.000002 0.000001 0.000001 0.000001 0.000003 0.000007 0.000004 0.000000 0.000002 0.000002 0.000003 0.000002 0.000012 0.000003 0.000001 0.000002 0.000003 0.000000 0...

output:

0.740882931

result:

ok found '0.7408829', expected '0.7408829', error '0.0000000'

Test #26:

score: 0
Accepted
time: 389ms
memory: 125760kb

input:

300000 300000
0.000000 0.000007 0.000002 0.000003 0.000003 0.000004 0.000006 0.000008 0.000002 0.000001 0.000002 0.000001 0.000000 0.000005 0.000012 0.000003 0.000000 0.000014 0.000000 0.000000 0.000003 0.000008 0.000001 0.000001 0.000002 0.000001 0.000001 0.000005 0.000005 0.000000 0.000003 0.00000...

output:

0.999999986

result:

ok found '1.0000000', expected '1.0000000', error '0.0000000'

Test #27:

score: 0
Accepted
time: 372ms
memory: 126880kb

input:

300000 300000
0.000001 0.000003 0.000001 0.000005 0.000003 0.000001 0.000000 0.000002 0.000003 0.000002 0.000002 0.000001 0.000020 0.000002 0.000006 0.000008 0.000002 0.000003 0.000012 0.000002 0.000002 0.000001 0.000005 0.000001 0.000001 0.000008 0.000004 0.000000 0.000004 0.000002 0.000006 0.00001...

output:

0.750543572

result:

ok found '0.7505436', expected '0.7505436', error '0.0000000'