QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#201167 | #7344. Those Russian Hackers | SolitaryDream | WA | 2ms | 20608kb | C++14 | 2.6kb | 2023-10-05 12:52:38 | 2023-10-05 12:52:38 |
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 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'