洛谷P8772 [蓝桥杯 2022 省 A] 求和(前缀和差分)

#include <stdio.h>
#include<stdlib.h>
int main() {
    int n;
    scanf("%d", &n);

    // 读取数组 a
    int* a = (int*)malloc(n * sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    // 计算前缀和数组 prefix_sum
    long long *prefix_sum=(long long*)malloc((n+1)*sizeof(long long));
    prefix_sum[0] = 0;
    for (int i = 1; i <= n; i++) {
        prefix_sum[i] = prefix_sum[i - 1] + a[i - 1];
    }

    // 计算答案 S
    long long S = 0;
    for (int i = 0; i < n; i++) {
        S += a[i] * (prefix_sum[n] - prefix_sum[i + 1]);
    }

    printf("%lld\n", S);
    free(a);
    free(prefix_sum);
    return 0;
}

ps:

1.虽然运行出了结果但后台一直报错,原因就是少开辟了一个空间

还有一处地方是我粗心(long long*)没写*号

2.然后有关前缀和不理解的,可以把它想象成乘法的结合律

  • prefix_sum[0] = 0
  • prefix_sum[1] = prefix_sum[0] + a[0] = 0 + 1 = 1
  • prefix_sum[2] = prefix_sum[1] + a[1] = 1 + 3 = 4
  • prefix_sum[3] = prefix_sum[2] + a[2] = 4 + 6 = 10
  • prefix_sum[4] = prefix_sum[3] + a[3] = 10 + 9 = 19
  • 然后题目所求可以前缀和与该数相乘可以理解为1*(19-1)+3*(19-4)+6*(19-10)+9*(19-19)=117

相关推荐

  1. P8772 [ 2022 A] 求和

    2024-02-23 09:24:02       13 阅读
  2. P8772 [ 2022 A] 求和

    2024-02-23 09:24:02       13 阅读
  3. P8740 [ 2021 A] 填空问题 题解

    2024-02-23 09:24:02       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-23 09:24:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-23 09:24:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-23 09:24:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-23 09:24:02       18 阅读

热门阅读

  1. 中级.NET开发工程师面试经历

    2024-02-23 09:24:02       29 阅读
  2. MySQL

    2024-02-23 09:24:02       23 阅读
  3. 【npm install报错,如何解决记录】讲解

    2024-02-23 09:24:02       32 阅读
  4. 汽车会撞死人,应不应该限制汽车?

    2024-02-23 09:24:02       29 阅读
  5. lua 拓展math库,增加四舍五入函数 math.round

    2024-02-23 09:24:02       28 阅读
  6. Docker的优势及实际应用

    2024-02-23 09:24:02       23 阅读
  7. LeetCode //C - 901. Online Stock Span

    2024-02-23 09:24:02       31 阅读