首页 > 其他 > 详细

ZOJ 3872 (思维)

时间:2015-05-27 15:57:00      阅读:216      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!