Sequence Pair Weight

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sequence Pair Weight相关的知识,希望对你有一定的参考价值。

Sequence Pair Weight

题意:

一个数组a,其中两个一样的数的贡献为1,问这个数组的所有子串的贡献和是多少?

题解:

举例:
对于[1,2,1,2,1,1,4]
我们考虑第三个1,他会有什么贡献?
(x表示不选)
第一个1和他配对的情况:
[1,2,1,2,1,x,x]
[1,2,1,2,1,1,x]
[1,2,1,2,1,1,4]
第二个1和他配对的情况:
[x,2,1,2,1,x,x]
[x,2,1,2,1,1,x]
[x,2,1,2,1,1,4]

[x,x,1,2,1,x,x]
[x,x,1,2,1,1,x]
[x,x,1,2,1,1,4]

大家有看出什么规律吗?
对于第三个1,他的贡献为在他之前的所有1的长度(这个长度为两个1之间的长度),比如第一个1的长度为1(到数组头),第二个1的长度为2(到第一个1),然后乘以第三个1后面的数量,因为后面数可以顺着跟
仔细看看上面的举例分析就明白了

代码:

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
int T,a[100050],n;
long long ans;
map<long long,long long> mp;
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		ans=0;
		mp.clear();
		scanf("%d",&n);
		for (int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		for (int i=1;i<=n;i++)
		{
			ans=ans+(n-i+1)*mp[a[i]];
			mp[a[i]]+=i;
		}
		printf("%lld\\n",ans);
	}
}

以上是关于Sequence Pair Weight的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #721 (Div. 2) C. Sequence Pair Weight

C - Sequence Pair Weight(组合数学)

C. Sequence Pair Weight——Codeforces Round #721 (Div. 2)

Codeforces Round #721 (Div. 2) C. Sequence Pair Weight(计算贡献/STL)

Sequence Pair Weight

C. Sequence Pair Weight(组合计数)