#155. 结构体大小

    ID: 155 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: (None) Uploaded By: Tags>2024暑假一期结训赛

结构体大小

Description

在C语言中的结构体定义时有严格的对齐要求,具体规则为:

  1. 成员在内存中的排列顺序为定义时给出的顺序
  2. 成员的首地址必须为元素大小的倍数
  3. 结构体大小必须为结构体中最大的成员的大小的倍数
  4. 结构体大小至少为 11

现在给你一个结构体的简化定义,请你计算出这个结构体的大小。

Input Format

第一行输入一个整数 nn,表示结构体中成员的个数。 接下来一行输入 nn 个整数 aia_i,表示结构体中按顺序第 ii 个成员的大小。

Output Format

一行输出一个整数,表示结构体的大小。

4
8 2 4 1
24

Hint

  1. 对于 100%100\% 的样例,0n1060 \le n \le 10^61ai1091 \le a_i \le 10^9
  2. 默认结构体的首地址为 00

样例解释

样例 #1

首先结构体首地址为 00
第一个成员的首地址为 00,满足 88 的倍数
第二个成员的首地址为 88,满足 22 的倍数
第三个成员的首地址为 1010,不满足 44 的倍数,向上取到最近的 44 的倍数 1212
第四个成员的首地址为 1616,满足是 11 的倍数
现在结构体大小为 1717,根据第三条规则,其中最大成员为 88,向上取到最近的 88 的倍数为 2424

该结构体的可能的声明为

在内存中的排布为