一、问题描述



二、解答
详见代码:
#include<iostream>
using namespace std;
int main()
{
int n, N;
cin >> n >> N;
int A[201] = { 0 };
for (int i = 1; i <= n; i++)
{
cin >> A[i];
}
int f[10000000] = { 0 };
int num[201] = { 0 };//该数组作用是统计f(x)相同值的个数,便于后面求和的计算
int sum = 0;
for (int i = 0; i <n; i++)//从A[0]到A[n-1]
{
for (int j = A[i]; j< A[i+1]; j++)//注意j的起始与结束条件
{
f[j] = i ;
num[i]++;
}
//sum += i * num[i];
}
//别忘了x开始大于A的情况!!!
for (int j = A[n]; j < N; j++)
//因为会有N>n的情况,所以最好单独讨论,即大于A[n]后的f的值都是n
{
f[j] = n;
num[n]++;
}
for (int i = 0; i <= n; i++)
{
sum += i * num[i]++;//最后相加即可
}
cout << sum << endl;
return 0;
}








