qq推广网站,苏州住房建设建局官方网站,适合小县城开的加盟店,北京公司网站Sequence Pair Weight
题意#xff1a;
一个数组a#xff0c;其中两个一样的数的贡献为1#xff0c;问这个数组的所有子串的贡献和是多少?
题解#xff1a;
举例#xff1a; 对于[1#xff0c;2#xff0c;1#xff0c;2#xff0c;1#xff0c;1#xff0c;4]…Sequence Pair Weight
题意
一个数组a其中两个一样的数的贡献为1问这个数组的所有子串的贡献和是多少?
题解
举例 对于[1212114] 我们考虑第三个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后面的数量因为后面数可以顺着跟 仔细看看上面的举例分析就明白了
代码
#includeiostream
#includecstdio
#includemap
using namespace std;
int T,a[100050],n;
long long ans;
maplong long,long long mp;
int main()
{scanf(%d,T);while(T--){ans0;mp.clear();scanf(%d,n);for (int i1;in;i){scanf(%d,a[i]);}for (int i1;in;i){ansans(n-i1)*mp[a[i]];mp[a[i]]i;}printf(%lld\n,ans);}
}