问题描述
解题思路
思路稍后再补。
AC代码
PA了一次,是因为没开long long
#include <vector>
#include <iostream>
#include <functional>
using namespace std;
long long func(long long first, long long last, long long r)
{
long long result;
if (first * last >= 0)
{
result=abs(first + last) * (abs(last - first) + 1) / 2 * r;
}
else
{
result = (abs(first) + 1) * abs(first) / 2 * r + (last + 1) * last / 2 * r;
}
return result;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, N;
cin >> n >> N;
long long r = N / (n + 1);
vector<long long> A;
A.emplace_back(0);
for (int i = 1; i <= n; ++i)
{
long long A_i;
cin >> A_i;
A.emplace_back(A_i);
}
A.emplace_back(N);
long long error = 0;
for (int i = 0; i <= n; ++i)
{
long long begin_num = A[i] / r;
long long end_num = (A[i + 1] - 1) / r;
long long first = begin_num - i, last = end_num - i;
error += func(first, last, r);
long long A_i_rem = A[i] % r;
long long A_ii_rem = r - (A[i + 1] - 1) % r - 1;
error -= abs(first) * A_i_rem + abs(last) * A_ii_rem;
}
cout << error << endl;
return 0;
}