Codeforces Round #721 C

C. Sequence Pair Weight

我们发现不管是分组内计算 或者是暴力都是不可取的
我们思考反想
一对相同数能够有算进多少种方式 显然是i*(n-i+1)的组合数
显然要是有第三个相同的数也是可以和前两个的组合的
所以我们记录一个mp[a[i]]表示前面a[i]存的下标即可

void solve() {
    int n,ans=0;cin>>n;
    map<int,int>mp;
    vector<int>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        ans+=mp[a[i]]*(n-i+1);
        mp[a[i]]+=i;
    }
    cout<<ans<<endl;
}
posted @ 2022-10-13 14:13  ycllz  阅读(23)  评论(0)    收藏  举报