码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 3872 (思维)

时间:2015-05-27 15:58:04      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

题意: 

给你一个串,  串和为所有不相同数字之和,  然后让你求该串所有连续子串总和为多少。

题解:

从前往后扫一次   ,  记录当前数字出现次数,  计算和的时候减去该数字乘出现次数

代码:

#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);
   }    
}

ZOJ 3872 (思维)

标签:

原文地址:http://blog.csdn.net/q651111937/article/details/46045565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!