zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 34 (Rated for Div. 2) D

    D. Almost Difference

    Let's denote a function

    You are given an array a consisting of n integers. You have to calculate the sum of d(ai, aj) over all pairs (i, j) such that 1 ≤ i ≤ j ≤ n.

    Input

    The first line contains one integer n (1 ≤ n ≤ 200000) — the number of elements in a.

    The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — elements of the array.

    Output

    Print one integer — the sum of d(ai, aj) over all pairs (i, j) such that 1 ≤ i ≤ j ≤ n.

    Examples

    input

    5
    1 2 3 1 3

    output

    4

    input

    4
    6 6 5 5

    output

    0

    input

    4
    6 6 4 4

    output

    -8

    Note

    In the first example:

    1. d(a1, a2) = 0;
    2. d(a1, a3) = 2;
    3. d(a1, a4) = 0;
    4. d(a1, a5) = 2;
    5. d(a2, a3) = 0;
    6. d(a2, a4) = 0;
    7. d(a2, a5) = 0;
    8. d(a3, a4) =  - 2;
    9. d(a3, a5) = 0;
    10. d(a4, a5) = 2.

    哇,好不容易写到第四题,突然弹出消息说这题爆long long,然后就懵逼了,看了下状态AC的全是Python。赛后发现Hacker在疯狂Hack C++,血赚场?

    怎么全世界都会long double,不过瞄到qls也被Hack了,窝q(小纠结.JPG)

    #include <bits/stdc++.h>
    using namespace std;
    map<double,double>a; 
    int main()
    {
        int n;
        scanf("%d",&n);
        long double ans=0;
        for (int i=0;i<n;i++)
        {
            double x;scanf("%lf",&x);
            a[x]++;
            ans= ans+ a[x+1]-a[x-1]+x*(i+1-n+i);
        }
        cout << fixed << setprecision(0) << ans << endl;
        return 0;
    }

    q巨赛后补题代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN=200005;
    const ll BASE=1000000000000000000LL;
    int a[MAXN];
    int main()
    {
        int n;
        scanf("%d",&n);
        ll high=0,low=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            low+=1LL*(2*(i-1)-(n-1))*a[i];
            while(low>=BASE)low-=BASE,high++;
            while(low<0)low+=BASE,high--;
        }
        map<int,int> mp;
        for(int i=1;i<=n;i++)
        {
            low-=mp[a[i]-1],low+=mp[a[i]+1];
            while(low>=BASE)low-=BASE,high++;
            while(low<0)low+=BASE,high--;
            mp[a[i]]++;
        }
        if(high>=-1 && high<=0)printf("%lld
    ",high*BASE+low);
        else if(high>0)printf("%lld%018lld
    ",high,low);
        else printf("%lld%018lld
    ",high+(low>0),(low>0)*BASE-low);
        return 0;
    }
  • 相关阅读:
    ASP.NET Core结合Nacos来完成配置管理和服务发现
    一次业务网关用ASP.NET Core 2.1重构的小结
    给HttpClient添加请求头(HttpClientFactory)
    使用Redis实现最近N条数据的决策
    记一次Python与C#的AES加密对接
    按次计费接口的简单实现思路
    .NET Core 3 WPF MVVM框架 Prism系列文章索引
    异步函数async await在wpf都做了什么?
    .NET Core 3 WPF MVVM框架 Prism系列之对话框服务
    .NET Core 3 WPF MVVM框架 Prism系列之导航系统
  • 原文地址:https://www.cnblogs.com/weimeiyuer/p/8053364.html
Copyright © 2011-2022 走看看