QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#201167#7344. Those Russian HackersSolitaryDreamWA 2ms20608kbC++142.6kb2023-10-05 12:52:382023-10-05 12:52:38

Judging History

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

  • [2023-10-05 12:52:38]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:20608kb
  • [2023-10-05 12:52:38]
  • 提交

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];
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: 0ms
memory: 20552kb

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: 2ms
memory: 20488kb

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

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: 2ms
memory: 20488kb

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

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: 2ms
memory: 20516kb

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

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

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

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

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

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

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: 2ms
memory: 20608kb

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

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

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

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

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

result:

wrong answer 1st numbers differ - expected: '0.7581921', found: '0.7581873', error = '0.0000048'