ZOJ 3872 Beauty of Array

来源:互联网 发布:c语言编译器安卓手机 编辑:程序博客网 时间:2024/06/03 20:42

题意:求一个序列中没有重复元素的子序列的和为多少

链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5520

思路:容斥求每个值的贡献,用map记录最接近的相同值的位置,通过容斥推出的公式计算每个值的贡献

注意点:无


以下为AC代码:

Run IDSubmit TimeJudge StatusProblem IDLanguageRun Time(ms)Run Memory(KB)User Name39449422015-04-26 18:16:31Accepted 3872C++0x3401052luminus

/* ************************************************# @Author  : Luminous11 (573728051@qq.com)*# @Date    : 2015-04-26 17:34:22*# @Link    : http://blog.csdn.net/luminous11*********************************************** */#include <bits/stdc++.h>#define clr(a, v) memset( a , v , sizeof(a) )using namespace std;const double eps = 1e-10;const double pi = acos(-1.0);long long num[100005];map<int,int>mp;int main(){    //ios::sync_with_stdio ( false );    int T;    scanf ( "%d", &T );    while ( T -- ){        int n;        scanf ( "%d", &n );        long long ans = 0;        mp.clear();        for ( int i = 1; i <= n; i ++ ){            scanf ( "%d", &num[i] );            ans += ( num[i] * ( i - mp[num[i]] ) * ( n - i + 1 ) );            mp[num[i]] = i;        }        printf ( "%lld\n", ans );    }    return 0;}


0 0