该题题意较长,需要好好理解题意再动手,关键在于sum(A)的计算,实际上,该题的提示已经明确了该题的解题思路
以样例1为例:sum(A)=0*(A[1]-A[0])+1*(A[2]-A[1])+2*(A[3]-A[2])+3*(A[4]-A[3])
这里的A[i]-A[i-1]代表了f值相同的数有多少个,0,1,2,3则代表了对应分段的f值是多少,这里你可以发现上面我多写了一个A[4],这里将A[4]赋值为N即可,因为操作是一样的
这里的0,1,2,3可以使用一个变量进行++,但是实际上,仔细观察不难发现实际上f值就是对应了A数组的下标
#include<iostream> using namespace std; int n,m; int A[205]; int main(){ int ans=0; cin>>n>>m; A[n + 1] = m; for(int i=1;i<=n;i++){ cin>>A[i]; } for (int i = 1; i <= n + 1; i++) { ans += ((A[i] - A[i - 1]) * (i - 1)); } cout<<ans<<endl; return 0; }