题意:
给你一个串, 串和为所有不相同数字之和, 然后让你求该串所有连续子串总和为多少。
题解:
从前往后扫一次 , 记录当前数字出现次数, 计算和的时候减去该数字乘出现次数
代码:
#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); } }
时间: 2024-10-23 05:36:31