QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#667666 | #5433. Absolute Difference | Yurily | WA | 1ms | 10080kb | C++20 | 3.9kb | 2024-10-23 01:53:04 | 2024-10-23 01:53:05 |
Judging History
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(int x){
int l=1,r=totb,res=totb+1;
while(l<=r){
int mid=l+r>>1;
if(pb[mid]>=x){
res=mid;
r=mid-1;
}
else
l=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){
int 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(0,x-1)*1.0/totb*(pa[i]*(x-1)-psum[x-1]);
}
ans/=1.0*tota;
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: 0ms
memory: 7996kb
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: 7928kb
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: 7872kb
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: 7928kb
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: 1ms
memory: 7952kb
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: 1ms
memory: 10080kb
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: 1ms
memory: 7852kb
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: 10076kb
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: 1ms
memory: 8032kb
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: 1ms
memory: 7972kb
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: 7896kb
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: 7844kb
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:
1560431.0604180000
result:
wrong answer 1st numbers differ - expected: '6479.3846800', found: '1560431.0604180', error = '239.8301309'