QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#592997#5433. Absolute Differencepengpeng_fudanWA 0ms4028kbC++141.9kb2024-09-27 11:00:022024-09-27 11:00:03

Judging History

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

  • [2024-09-27 11:00:03]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:4028kb
  • [2024-09-27 11:00:02]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using ll =long long;
void solve(){
    int n,m;
    cin>>n>>m;
    vector<pair<long double,long double>> a(n+1);
    vector<pair<long double,long double>> b(m+1);
    for(int i=1;i<=n;i++)   cin>>a[i].first>>a[i].second;
    for(int i=1;i<=m;i++)   cin>>b[i].first>>b[i].second;
    sort(a.begin()+1,a.end());
    sort(b.begin()+1,b.end());
    vector<long double> qza(n+1),qzb(m+1);
    ll suma=0,sumb=0;
    for(int i=1;i<=n;i++)   suma+=a[i].second-a[i].first;
    for(int i=1;i<=n;i++){
        if(suma==0) qza[i]=1;
        else qza[i]=(a[i].second-a[i].first);
    }

    for(int i=1;i<=n;i++)   sumb+=b[i].second-b[i].first;
    for(int i=1;i<=n;i++){
        if(sumb==0) qzb[i]=1;
        else qzb[i]=(b[i].second-b[i].first);
    }
    if(suma==0)  suma=n;
    if(sumb==0)  sumb=m;
    long double ans=0;
    auto ope=[&](int t)->void {
        long double sb=0,sqzb=0;
        int lo=0;
        for(int i=0;i<(int)a.size();i++){
            while(lo!=(int)b.size()&&(t?b[lo].second<a[i].first:b[lo].second<=a[i].first))   {
                sb+=(b[lo].second+b[lo].first)/2*qzb[lo];
                sqzb+=qzb[lo];
                lo++;
            }
            ans+=-sb*qza[i]+sqzb*qza[i]*(a[i].first+a[i].second)/2;
            int ro=lo;
            while(ro!=(int)b.size()&&(t?b[ro].second<a[i].second:b[ro].second<=a[i].second)){
                auto [x1,x2]=a[i];
                auto [y1,y2]=b[i];
                ans+=((x1+x2)/2-(y1+y2)/2)*qza[i]*qzb[lo]-(__int128_t)(x1-y2)*(x1-y2)*(x1-y2)/3;
                ro++;
            }
        }
    };
    ope(1);
    swap(a,b);swap(qza,qzb);
    ope(0);
    cout<<setprecision(12)<<(ans/suma)/sumb<<'\n';

}
int main() {
    ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);

    int _ = 1;
    while (_--) solve();

    return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 4028kb

input:

1 1
0 1
0 1

output:

0.666666666667

result:

wrong answer 1st numbers differ - expected: '0.3333333', found: '0.6666667', error = '0.3333333'