Codeforces Round 946 (Div. 3)C. Beautiful Triple Pairs

题目描述:

给你一个长度为n的数组a,请你求出所有三元组 [ a j , a j + 1 , a j + 2 ] [a_j,a_{j+1},a_{j+2}] [aj,aj+1,aj+2]中完美三元组的对数
设有三元组 b , c 完美三元组的定义 : 满足其中一个即可 1. b 1 ≠ c 1 和 b 2 = c 2 和 b 3 = c 3 2. b 1 = c 1 和 b 2 ≠ c 2 和 b 3 = c 3 3. b 1 = c 1 和 b 2 = c 2 和 b 3 ≠ c 3 设有三元组b,c\\ 完美三元组的定义: 满足其中一个即可\\ 1.b_1\neq c_1 和 b_2 = c_2 和 b_3=c_3\\ 2.b_1= c_1 和 b_2 \neq c_2 和 b_3=c_3\\ 3.b_1=c_1 和 b_2 = c_2 和 b_3 \neq c_3\\ 设有三元组b,c完美三元组的定义:满足其中一个即可1.b1=c1b2=c2b3=c32.b1=c1b2=c2b3=c33.b1=c1b2=c2b3=c3

思路:

哈希记录一下就行了 哈希记录一下就行了 哈希记录一下就行了

代码:

#include <bits/stdc++.h>

using namespace std;

using ll=long long;
int t;

int main(){
    cin >> t;
    while(t--){
        int n;cin >> n;
        vector<int> a(n,0);
        for(int i=0;i<n;i++) cin >> a[i];
        map<array<int,3>,int> cnt;//建立三元组哈希
        ll res=0;
        for(int i=0;i<n-2;i++){
        	//记录此时的三元组
            array<int,3> th={a[i],a[i+1],a[i+2]};
            //考虑所有可能相同的情况
            vector<array<int,3>> list={
                {0,a[i+1],a[i+2]},
                {a[i],0,a[i+2]},
                {a[i],a[i+1],0}
            };
            for(auto i:list){
            	//该三元组对答案的贡献为"该情况的数目"-"和该三元组相同的数目"
                res+=cnt[i]-cnt[th];
                cnt[i]++;//该情况的数目加一
            }
            cnt[th]++;//该三元组的数目加一
        }
        cout << res << endl;
    }
    return 0;
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值