标签:
题意:
给你一个串, 串和为所有不相同数字之和, 然后让你求该串所有连续子串总和为多少。
题解:
从前往后扫一次 , 记录当前数字出现次数, 计算和的时候减去该数字乘出现次数
代码:
#include<stdio.h>
#include<iostream>
#include<map>
using namespace std;
map<int, long long int> mark;
int main()
{
int T, a, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
long long int sum = 0, ans = 0;
mark.clear();
for(int i = 1; i <= n; i++)
{
scanf("%d", &a);
ans += (i*a);
sum += ans;
sum -= (mark[a] * a);
ans -= (mark[a] * a);
mark[a] = i;
}
printf("%lld\n", sum);
}
}
标签:
原文地址:http://blog.csdn.net/q651111937/article/details/46045565