此外需要注意的细节是需要使用 long long,以及 long long 的输出控制符是 %lld 而不是 %ld。
AC代码
#include<iostream>#include<cmath>usingnamespace std;typedeflonglong ll;intmain(){int n, N;scanf("%d%d",&n,&N);int A[n+2];
A[0]=0;
A[n+1]= N;// 省去特判for(int i =1; i <= n; i++)scanf("%d",&A[i]);int r = N /(n+1);int gx =0;int next_x = r;
ll sum =0;for(int i =1; i <= n+1; i++){int base = A[i-1];// 当前区间左端点值while(true){if(A[i]< next_x){
sum +=(ll)abs((i-1)- gx)*(ll)(A[i]- base);break;}else{
sum +=(ll)abs((i-1)- gx)*(ll)(next_x - base);if(A[i]== next_x)break;
base = next_x;
next_x += r;
gx++;}}}printf("%lld", sum);return0;}