EVERYTHING HAPPENS FOR THE BES|

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-04-29 23:42阅读: 36评论: 0推荐: 0

abc252_d Distinct Trio 题解

Distinct Trio

这是数学题耶!

题意

给定一个整数 n 和一个长度为 n 的整数序列 a,求满足以下要求的三元组个数:

  • 1i<j<kn
  • aiajajakakai

思路

先想正着做,好,不会。

正着做不行就反着做,先算出所有情况,再去掉不合法。

  • 所有情况的公式:n×(n1)×(n2)6
    • 公式小解析:首先不考虑顺序,选掉一个数就少一个,选 3 个就是 n×(n1)×(n2)
    • 考虑顺序,去掉不合法,除以 6
  • 不合法的公式:
    • 不合法的情况就两种:
      • 两个数相同,另一个不同。
      • 三个数都相同。
    • cnti 表示 i 在序列中的出现次数。
    • 对于一个出现在序列中的整数 i,它对答案的负贡献分为以下两种:
      • cnti×(cnti1)×(cnti2)6,三个元素都相同,与所有情况同理。
      • cnti×(cnti1)×(ncnti)2,其中两个元素相同需要去重,除以 2,另外一个数可以是非 i 的任意数。

记得开个 long long

Code

点击查看代码
#include <iostream>
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
int n, a[N], cnt[N];
bool f[N];
ll ans; // 记得开 long long
int main () {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
cnt[a[i]]++; // 统计出现次数
}
ans = 1ll * n * (n - 1) * (n - 2) / 6; // 所有情况
for (int i = 1; i <= n; i++) {
if (f[a[i]]) { // 同一个数不用多次求
continue;
}
f[a[i]] = 1; // 标记
ans -= 1ll * cnt[a[i]] * (cnt[a[i]] - 1) * (cnt[a[i]] - 2) / 6; // 套用公式
ans -= 1ll * cnt[a[i]] * (cnt[a[i]] - 1) * (n - cnt[a[i]]) / 2;
}
cout << ans;
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17364713.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(36)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
月光曲完整版 贝多芬 - 云熙音乐
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

暂无歌词

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示