Beauty Values (2020ICPC·小米 网络选拔赛热身赛 贪心)

该博客介绍了如何计算一个整数序列中所有连续子序列的美丽值之和,美丽值定义为子序列中不同元素的数量。通过举例说明,解释了如何统计每个元素在所有子序列中出现的次数,并给出了解决问题的贪心算法思路。最后,给出了源代码实现来计算这个和。
摘要由CSDN通过智能技术生成

Beauty Values

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

  Gromah and LZR have entered the second level. There is a sequence a1,a2,a3……an on the wall.

  There is also a note board saying “the beauty value of a sequence is the number of different elements in the sequence”.

  LZR soon comes up with the password of this level, which is the sum of the beauty values of all successive subintervals of the sequence on the wall.

  Please help them determine the password!

输入描述

  The first line contains one positive integer n , denoting the length of the sequence.

  The second line contains n positive integers a1,a2,a3……an, denoting the sequence.

  1 ≤ ai ≤ n ≤ 105

输出描述

  Print a non-negative integer in a single line, denoting the answer.

输入

4
1 2 1 3

输出

18

说明

The beauty values of subintervals [1,1], [2,2], [3,3], [4,4] are all 1

.
The beauty values of subintervals [1,2], [1,3], [2,3], [3,4] are all 2

.
The beauty values of subintervals [1,4], [2,4] are all 3

.
As a result, the sum of all beauty values are 1×4+2×4+3×2=18.

题意

  所有子串的中每个个子串的元素种类之和,贪就完事。

思路

  计算一下每一个元素在子串中一共占了多少
eg:
  母串:1213

子串1类:

1
12
121
1213

子串2类:

2
21
213

子串3类:

1
13

子串4类:

3
31

统计:

第一个元素1一共在子串中被计算了4次。
第二个元素2一共在子串中被计算了6次。
第三个元素1一共在子串中被计算了4次。
第四个元素3一共在子串中被计算了4次。
结果为:18

总结:
所有元素和之前的与此元素相同的元素下标只差此元素为开头的子串个数乘机

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
    ll n, m, i, j, t, w;
    while (cin >> n) {
        map<ll, ll>be, en;
        for (i = 1, j = 0; cin >> t, i <= n; i++) {
            be[t] = en[t]; en[t] = i;
            j += ((en[t] - be[t]) * (n - i + 1));
        }
        cout << j << endl;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GUESSERR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值