鱼C论坛

 找回密码
 立即注册
查看: 1131|回复: 2

其中计算区间和没有看懂

[复制链接]
发表于 2023-11-19 10:54:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
typedef long long ll;

ll n, a, res, len;
vector<ll> arr[N];
int main() {
        cin >> n;
        for (int i = 1; i <= n; i++) {
                cin >> a;
                arr[a].push_back(i);//记录数字下标
        }
        for (int i = 1; i <= n; i++) {
                if (arr[i].size() >= 2) {
                        len = arr[i].size();//计算这个数字有多少个下标
                        for (int j = 1; j < len; j++) {//遍历数字的下标号
                                res += (arr[i][j] - arr[i][j - 1] - 1) * j * (len - j);//计算区间和
                        }
                }
        }
        cout << res;
        return 0;
}
里面的计算区间和逻辑是什么,例如:1  2 1 3 2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-19 10:54:41 | 显示全部楼层
这段代码是用来计算给定数组中每个数字所在位置的区间和的。具体来说,对于每个数字,它的区间和是指该数字在数组中出现的每对位置之间的距禆乘以两个位置之间的数字个数的乘积之和。

举个例子,对于数组[1, 2, 1, 3, 2],其中数字1的区间和为:

(2-1-1)*1*(2-1) + (3-1-1)*1*(2-1) = 1

数字2的区间和为:

(5-2-1)*1*(2-1) = 2

数字3的区间和为0,因为只有一个3。

所以最后的输出结果为1+2+0=3。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-19 10:55:23 | 显示全部楼层
这段代码是用来计算数组中重复数字所组成的区间和的。具体来说,给定一个数组,数组中的每个元素和其下标构成了一个二维坐标系,现在需要计算出所有重复数字所构成的区间的长度之和。

让我用你提供的示例来解释一下这段代码的计算逻辑。假设输入的数组为 1 2 1 3 2。

1. 首先,对于每个数字a,将其下标i存入arr[a]数组中,表示数字a出现在第i个位置。这里arr[1] = {1, 3},arr[2] = {2, 5},arr[3] = {4}。

2. 接着,对于每个数字i,如果它出现的次数大于等于2(即arr[i].size() >= 2),则进入内层循环。

3. 在内层循环中,首先计算这个数字出现的次数len(即arr[i].size()),然后遍历该数字在数组中的下标位置。

4. 对于每个下标位置j,计算以当前下标为起点和终点、且包含其他重复数字的区间长度之和。具体计算公式为 (arr[i][j] - arr[i][j - 1] - 1) * j * (len - j),其中arr[i][j]表示数字i在数组中的第j个位置。

5. 最后将所有区间和相加得到最终结果res。

6. 最后输出结果res。在这个例子中,计算的结果将被打印出来。

希望这样解释能够帮助你理解这段代码的计算逻辑。如果还有其他问题,欢迎随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表