QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#667682#5433. Absolute DifferenceYurilyWA 2ms10112kbC++204.0kb2024-10-23 02:16:152024-10-23 02:16:15

Judging History

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

  • [2024-10-23 02:16:15]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:10112kb
  • [2024-10-23 02:16:15]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5+5;
struct area{
	int l,r;
};
area a[MAX],b[MAX];
long double presum[MAX],ps[MAX],sufsum[MAX],ss[MAX];
long long pa[MAX],pb[MAX],tota,totb;
long double ans;
int cnta,cntb,n,m;
long long psum[MAX],sa;
long long lens[MAX];
long long tmpp[MAX];
area tmp[MAX];
long double calc1(long double y,long double c1,long double c2,long double c3){
	return c1*y*y*y+c2*y*y+c3*y;
}
long double calc2(long double y,long double c1,long double c2){
	return c1*y*y+c2*y;
}
long double calc3(long double y,long double c1,long double c2){
	return y*y+c1*y+c2;
}
long double calc4(long double y,long double c1,long double c2){
	return c1*y+c2;
}
// 快读 
int findf(int x){
	int l=1,r=m+1,res;
	while(l<=r){
		int mid=l+r>>1;
		if(b[mid].r>x){
			res=mid;
			r=mid-1;
		}
		else
			l=mid+1; 
	}
	return res;
}
int find2(long long x){
	int l=1,r=totb,res=0;
	while(l<=r){
		int mid=l+r>>1;
		if(pb[mid]<=x){
			res=mid;
			l=mid+1;
		}
		else
			r=mid-1; 
	}
	return res;
}
int read(){
	int x = 0, f = 1;
	char c = getchar();
	while(c < '0' || c > '9'){
		if(c == '-'){
			f = -1;
		}
		c = getchar();
	}
	while(c >= '0' && c <= '9'){
		x = x*10+c-'0';
		c = getchar();
	}
	return x*f;
}
bool cmp(area x,area y){
	return x.l<y.l;
}
void SWAP(){	
	for(int i=1;i<=n;++i)
		tmp[i]=a[i];//	cout<<"(("<<endl;
	for(int i=1;i<=m;++i)
		a[i]=b[i];
	for(int i=1;i<=n;++i)
		b[i]=tmp[i];

	for(int i=1;i<=tota;++i)
		tmpp[i]=pa[i];
	for(int i=1;i<=totb;++i)
		pa[i]=pb[i];
	for(int i=1;i<=tota;++i)
		pb[i]=tmpp[i];	
	
	swap(n,m);
	swap(tota,totb);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		a[++cnta].l=read(),a[cnta].r=read();
		sa+=a[cnta].r-a[cnta].l;
		if(a[cnta].r==a[cnta].l){
			pa[++tota]=a[cnta].l;
			cnta--;
		}
	}
	for(int i=1;i<=m;++i){
		b[++cntb].l=read(),b[cntb].r=read();
		if(b[cntb].r==b[cntb].l){
			pb[++totb]=b[cntb].l;
			cntb--;
		}
	}
	
	n=cnta,m=cntb;//cout<<n<<" "<<m<<endl;
	if(m==0)
		SWAP();
//	cout<<"**"<<endl;
	if(n)
		sort(a+1,a+1+n,cmp);
	if(m)
		sort(b+1,b+1+m,cmp);
	b[m+1].l=2e9,b[m+1].r=2e9;
	
	for(int i=1;i<=m;++i){
		presum[i]=presum[i-1]+b[i].r-b[i].l;
		ps[i]=ps[i-1]+0.5*b[i].l*b[i].l-0.5*b[i].r*b[i].r;
	}	
	for(int i=m;i>=1;--i){
		sufsum[i]=sufsum[i+1]+b[i].l-b[i].r;
		ss[i]=ss[i+1]+0.5*b[i].r*b[i].r-0.5*b[i].l*b[i].l;
	}
	
	if(n==0&&m==0){
		for(int i=1;i<=totb;++i){
			psum[i]=psum[i-1]+pb[i];
		}
		for(int i=1;i<=tota;++i){
			long long x=find2(pa[i]);
		//	cout<<x<<endl;
		//	ans+=(totb-x+1)*1.0/totb*((psum[totb]-psum[x-1])-pa[i]*(totb-x+1))+max(0ll,(x-1))*1.0/totb*(pa[i]*max(0ll,(x-1))-psum[x-1]);
			ans+=(long long)pa[i]*x-psum[x]+(psum[totb]-psum[x])-(pa[i]*(totb-x));
		}
		ans/=1.0*tota;
		ans/=totb;
		printf("%.10Lf",ans);
		return 0;
	}
	else{
		if(n==0){
//			cout<<"))"<<endl;
			for(int i=1;i<=tota;++i){
				int x=findf(pa[i]);
//				cout<<pa[i]<<" "<<i<<" "<<x<<endl;
				if(b[x].l<=pa[i]){
					long long lx=b[x].l,rx=b[x].r;
					ans+=calc3(pa[i],presum[x-1]-lx+sufsum[x+1]-rx,0.5*lx*lx+ps[x-1]+0.5*rx*rx+ss[x+1]);
				}
				if(b[x].l>pa[i]){
				//	cout<<presum[x-1]+sufsum[x]<<" "<<ps[x-1]+ss[x]<<endl;
					ans+=calc4(pa[i],presum[x-1]+sufsum[x],ps[x-1]+ss[x]);
				}	
			}
			ans/=tota;
//			cout<<presum[m]<<endl;
			ans/=presum[m];
			printf("%.10Lf",ans);
			return 0;
		}
	}	
	for(int i=1;i<=n;++i){
		int cur=a[i].l;
		while(cur<a[i].r){
			int x=findf(cur);
			if(b[x].l<=cur){
				long long ly=cur,ry=min(b[x].r,a[i].r);
				long long lx=b[x].l,rx=b[x].r;
				ans+=calc1(ry,1.0/3,(presum[x-1]+sufsum[x+1]-lx-rx)*0.5,0.5*(lx*lx+rx*rx)+ps[x-1]+ss[x+1])
					-calc1(ly,1.0/3,(presum[x-1]+sufsum[x+1]-lx-rx)*0.5,0.5*(lx*lx+rx*rx)+ps[x-1]+ss[x+1]);
				
				cur=ry;
			}
			if(b[x].l>cur){
				long long ly=cur,ry=min(b[x].l,a[i].r);
				ans+=calc2(ry,(presum[x-1]+sufsum[x])*0.5,ps[x-1]+ss[x])
					 -calc2(ly,(presum[x-1]+sufsum[x])*0.5,ps[x-1]+ss[x]);
				cur=ry;
			}
		}
	}
	printf("%.10Lf",ans/sa/presum[m]);
} 

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 8000kb

input:

1 1
0 1
0 1

output:

0.3333333333

result:

ok found '0.333333333', expected '0.333333333', error '0.000000000'

Test #2:

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

input:

1 1
0 1
1 1

output:

0.5000000000

result:

ok found '0.500000000', expected '0.500000000', error '0.000000000'

Test #3:

score: 0
Accepted
time: 1ms
memory: 7916kb

input:

1 1
-1000000000 1000000000
-1000000000 1000000000

output:

666666666.6666666574

result:

ok found '666666666.666666627', expected '666666666.666666627', error '0.000000000'

Test #4:

score: 0
Accepted
time: 1ms
memory: 7940kb

input:

1 1
-1000000000 0
0 1000000000

output:

1000000000.0000000000

result:

ok found '1000000000.000000000', expected '1000000000.000000000', error '0.000000000'

Test #5:

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

input:

1 1
-1000000000 -1000000000
-1000000000 1000000000

output:

1000000000.0000000000

result:

ok found '1000000000.000000000', expected '1000000000.000000000', error '0.000000000'

Test #6:

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

input:

1 1
-999999999 1000000000
-1000000000 -1000000000

output:

1000000000.5000000002

result:

ok found '1000000000.500000000', expected '1000000000.500000000', error '0.000000000'

Test #7:

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

input:

1 1
-1000000000 1000000000
-999999999 -999999999

output:

999999999.0000000005

result:

ok found '999999999.000000000', expected '999999999.000000000', error '0.000000000'

Test #8:

score: 0
Accepted
time: 1ms
memory: 8056kb

input:

1 1
1000000000 1000000000
-1000000000 -1000000000

output:

2000000000.0000000000

result:

ok found '2000000000.000000000', expected '2000000000.000000000', error '0.000000000'

Test #9:

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

input:

1000 1000
-2175 -2174
-1068 -1065
-1721 -1718
777 834
1162 1169
-3529 -3524
3966 3993
1934 1952
-234 -223
-4967 -4947
8500 8510
5272 5276
-6048 -6033
-34 -22
700 705
-7890 -7886
5538 5543
4114 4126
-9201 -9162
-1521 -1519
-5103 -5100
439 441
993 997
-1684 -1680
-8413 -8404
6724 6728
-3242 -3239
2616...

output:

6717.1171457395

result:

ok found '6717.117145740', expected '6717.117145739', error '0.000000000'

Test #10:

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

input:

1000 1000
-5010 -4999
-2128 -2113
-5798 -5765
705 713
-3956 -3938
-5308 -5307
6759 6772
-772 -770
-860 -859
2308 2323
-5500 -5500
5140 5177
-6747 -6733
7509 7511
8864 8870
-6382 -6374
1901 1904
-5763 -5760
3019 3027
2962 2963
-314 -301
-222 -203
-726 -724
-62 -58
-1203 -1195
-5216 -5215
-4298 -4292
...

output:

6682.5811274714

result:

ok found '6682.581127471', expected '6682.581127471', error '0.000000000'

Test #11:

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

input:

1000 1000
770 770
5869 5869
-8786 -8786
7549 7549
-4165 -4165
4023 4023
-9779 -9779
7797 7797
1105 1105
508 508
7653 7653
-359 -359
9393 9393
-9363 -9363
-4160 -4160
-3682 -3682
9409 9409
-8548 -8548
-9908 -9908
-7494 -7494
3751 3751
2326 2326
-3311 -3311
3651 3651
-7663 -7663
5376 5376
-7071 -7071
...

output:

6673.7568168910

result:

ok found '6673.756816891', expected '6673.756816891', error '0.000000000'

Test #12:

score: -100
Wrong Answer
time: 0ms
memory: 9908kb

input:

1000 1000
-735 -735
-829 -829
-6376 -6376
8558 8558
155 155
5533 5533
8800 8800
-1738 -1738
919 919
52 52
2076 2076
-6911 -6911
139 139
6733 6733
9923 9923
-4619 -4619
-9429 -9429
9902 9902
-5984 -5984
2580 2580
8738 8738
7960 7960
3388 3388
-2689 -2689
7986 7986
2565 2565
-8908 -8908
9359 9359
-434...

output:

1476.0432440000

result:

wrong answer 1st numbers differ - expected: '6479.3846800', found: '1476.0432440', error = '0.7721939'