题意:
求:每个数和他前面的数,跟他差值大于一的数的差值的和
思路:
对于每一个数ai,减去他之前的所有的数和,这样的话 有一部分会多减,就是跟这个数差值是一的数,
这样我们再记录每一个数的数量,可以知道ai+1 和 ai-1 的数目,再相应的加上减去个数就是了
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<set>
#include<queue>
#include<stack>
#include<map>
#define PI acos(-1.0)
#define in freopen("in.txt", "r", stdin)
#define out freopen("out.txt", "w", stdout)
#define kuaidian ios::sync_with_stdio(0);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2e5 + 7, maxd = 1e8;
const ll mod = 1e9 + 7;
const int INF = 0x7f7f7f7f;
int n;
ll sum[maxn];
map<ll , int> mp;
int main() {
kuaidian;
mp.clear();
cin >> n;
long double ans = 0;
for(int i = 1; i <= n; ++i) {
ll x;
cin >> x;
ans += ( (long double)(x*(i-1)) - (long double)(sum[i-1]) );
if(mp[x-1]) ans -= (long double)(mp[x-1]);
if(mp[x+1]) ans += (long double)(mp[x+1]);
sum[i] = sum[i-1] + x;
mp[x]++;
}
cout << fixed << setprecision(0) << ans << endl;
return 0;
}