QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#200543#7344. Those Russian HackersPhantomThreshold#AC ✓1162ms102404kbC++202.6kb2023-10-04 17:25:482023-10-04 17:25:48

Judging History

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

  • [2023-10-04 17:25:48]
  • 评测
  • 测评结果:AC
  • 用时:1162ms
  • 内存:102404kb
  • [2023-10-04 17:25:48]
  • 提交

answer

#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;

const int maxn = 1100000;
const double pi = acos(-1);

struct E
{
	double x,y;
	friend inline E operator +(const E &k1,const E &k2){ return (E){k1.x+k2.x,k1.y+k2.y}; }
	friend inline E operator -(const E &k1,const E &k2){ return (E){k1.x-k2.x,k1.y-k2.y}; }
	friend inline E operator *(const E &k1,const E &k2)
	{
		return (E){ k1.x*k2.x-k1.y*k2.y,k1.x*k2.y+k1.y*k2.x };
	}
};
namespace FFT
{
	int id[maxn];
	void DFT(E f[],const int N,const int sig)
	{
		for(int i=0;i<N;i++) if(i<id[i]) swap(f[i],f[id[i]]);
		for(int m=2;m<=N;m<<=1)
		{
			int t=m>>1;
			for(int i=0;i<t;i++)
			{
				E temp=(E){cos(2*pi*i/m),sin(2*pi*i/m*sig)};
				for(int j=i;j<N;j+=m)
				{
					E tx=f[j],ty=f[j+t]*temp;
					f[j]=tx+ty;
					f[j+t]=tx-ty;
				}
			}
		}
		if(sig==-1)
		{
			for(int i=0;i<N;i++) f[i].x/=(double)N;
		}
	}
	E f[maxn],g[maxn];
	void FFT(double f1[],double f2[],double ret[],const int n,const int m)
	{
		int N=1,ln=0;
		while(N<=(n+m)) N<<=1,ln++;
		for(int i=1;i<N;i++) id[i]=id[i>>1]>>1|(i&1)<<(ln-1);
		
		for(int i=0;i<N;i++)
		{
			if(i<=n) f[i]=(E){f1[i],0};
			else f[i]=(E){0,0};
			
			if(i<=m) g[i]=(E){f2[i],0};
			else g[i]=(E){0,0};
		}
		DFT(f,N,1); DFT(g,N,1);
		for(int i=0;i<N;i++) f[i]=f[i]*g[i];
		DFT(f,N,-1);
		
		for(int i=0;i<=n+m;i++) ret[i]=f[i].x;
	}
}

int n,K;
double p[maxn],q[maxn],sumq[maxn],sump[maxn];

double w1[maxn],w0[maxn],t1[maxn],t2[maxn],t3[maxn];
double sumw[maxn];

signed main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	cin>>n>>K;
	for(int i=0;i<n;i++) 
	{
		cin>>p[i];
		if(!i) sump[i]=p[i];
		else sump[i]=sump[i-1]+p[i];
	}
	p[n]=0;
	for(int i=1;i<=2*n-2;i++) 
	{
		cin>>q[i];
		sumq[i]=sumq[i-1]+q[i];
	}
	
	for(int i=0;i<=2*n-2;i++) t1[i]=sumq[i];
	for(int i=0;i<=n;i++) t2[n-i]=p[i];
	FFT::FFT(t1,t2,t3,2*n-2,n);
	for(int i=0;i<=n;i++) w1[i]= t3[2*n-i];
	
	for(int i=0;i<=n;i++) t1[i]=sumq[i];
	for(int i=0;i<=n;i++) t2[n-i]=p[i];
	FFT::FFT(t1,t2,t3,n,n);
	for(int i=0;i<=n;i++) w0[i]=t3[n-i];
	
	double temp=0;
	{
		double ss=0;
		for(int i=0;i<n;i++)
		{
			double cc=ss;
			if(i==0||sump[i-1]<1.0) cc+= w0[i]; // /(1.0-sump[i-1]);
			temp=max(temp, cc );
			ss+= p[i]*sumq[n-i-1];
		}
	}
	
	for(int i=1;i<=n;i++) sumw[i]= sumw[i-1]+p[i-1]*w1[i];
	
	for(int k=K-1,j=n;k>=1;k--)
	{
		while(j>1&& w1[j]<temp ) 
			j--;
		//w1[j]>=temp
		temp= sumw[j]+(1-sump[j-1])*temp;
	}
	
	cout<<fixed<<setprecision(12)<<temp<<endl;
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3 1
0.5 0.25 0.25
0.75 0.25 0.0 0.0

output:

0.687500000000

result:

ok found '0.6875000', expected '0.6875000', error '0.0000000'

Test #2:

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

input:

3 2
0.3 0.4 0.3
0.0 0.0 0.0 1.0

output:

0.090000000000

result:

ok found '0.0900000', expected '0.0900000', error '0.0000000'

Test #3:

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

input:

3 1
0.5 0.2 0.3
1.0 0.0 0.0 0.0

output:

0.800000000000

result:

ok found '0.8000000', expected '0.8000000', error '0.0000000'

Test #4:

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

input:

2 1
1.0 0.0
0.7 0.3

output:

0.700000000000

result:

ok found '0.7000000', expected '0.7000000', error '0.0000000'

Test #5:

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

input:

2 2
0.0 1.0
0.6 0.4

output:

0.600000000000

result:

ok found '0.6000000', expected '0.6000000', error '0.0000000'

Test #6:

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

input:

3 1
0.1 0.1 0.8
1.0 0.0 0.0 0.0

output:

0.900000000000

result:

ok found '0.9000000', expected '0.9000000', error '0.0000000'

Test #7:

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

input:

2 1
0.196570 0.803430
0.417660 0.582340

output:

0.335560573800

result:

ok found '0.3355606', expected '0.3355606', error '0.0000000'

Test #8:

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

input:

2 1
0.392496 0.607504
1.000000 0.000000

output:

0.607504000000

result:

ok found '0.6075040', expected '0.6075040', error '0.0000000'

Test #9:

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

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

result:

ok found '0.9010275', expected '0.9010275', error '0.0000000'

Test #10:

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

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

result:

ok found '0.8538334', expected '0.8538334', error '0.0000000'

Test #11:

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

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

result:

ok found '0.3063300', expected '0.3063300', error '0.0000000'

Test #12:

score: 0
Accepted
time: 2ms
memory: 24732kb

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

result:

ok found '0.9999839', expected '0.9999839', error '0.0000000'

Test #13:

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

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

result:

ok found '0.9864288', expected '0.9864288', error '0.0000000'

Test #14:

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

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

result:

ok found '0.6283031', expected '0.6283031', error '0.0000000'

Test #15:

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

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

result:

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

Test #16:

score: 0
Accepted
time: 5ms
memory: 24672kb

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

result:

ok found '0.9999980', expected '0.9999980', error '0.0000000'

Test #17:

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

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

result:

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

Test #18:

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

input:

2 300000
0.044919 0.955081
1.000000 0.000000

output:

1.000000000000

result:

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

Test #19:

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

input:

2 300000
0.922991 0.077009
0.216415 0.783585

output:

0.276758097265

result:

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

Test #20:

score: 0
Accepted
time: 1133ms
memory: 99312kb

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

result:

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

Test #21:

score: 0
Accepted
time: 1162ms
memory: 102208kb

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

result:

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

Test #22:

score: 0
Accepted
time: 1071ms
memory: 100428kb

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

result:

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

Test #23:

score: 0
Accepted
time: 1132ms
memory: 102404kb

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

result:

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

Test #24:

score: 0
Accepted
time: 1093ms
memory: 100496kb

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

result:

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

Test #25:

score: 0
Accepted
time: 1119ms
memory: 100480kb

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

result:

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

Test #26:

score: 0
Accepted
time: 1074ms
memory: 100552kb

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

result:

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

Test #27:

score: 0
Accepted
time: 1147ms
memory: 98724kb

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

result:

ok found '0.7505437', expected '0.7505436', error '0.0000001'