提交结果如下:
自己的第一次上手,开始记录一下做第一道题的坑。第一遍做的时候完全按照题意的顺序,写了两个for循环,导致运行超时;
后来便从例子出发,找规律,发现通过N来确定整组序列的大小,确定了起点和终点。
i=2,3,4,对应f(i)为1,1,1;即2,3,4是位于序列A的2和5之间;
i=5,6,7,对应f(i)为2,2,2;即5,6,7是位于序列A的5和8之间;
这样利用一个for循环解决了i从0到A序列最后一个值,还有A序列最后一个值到N之间未比较,需要作类似上述操作,但不需要循环,一次相加就可以。
#include <iostream>
using namespace std;
int main(){
int n, N;
cin>>n>>N;
n = n+1;
int arr[n];
int sum = 0;
for(int i = 1;i<n;i++){
int a;
cin>>a;
arr[i]=a;
}
for(int i =1;i<n;i++){
sum+=(arr[i]-arr[i-1])*(i-1);
}
sum+=N*(n-1)-arr[n-1]*(n-1);
cout<<sum;
return 0;
}