D - Distinct Trio

D - Distinct Trio

题意:求三个数个各不相同的数目。

题解:正面考虑比较困难,可以反向思考,在总值上减去不符合的即可

复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=5e5+50;
ll a[N];
ll sum[N],d,vis[N];
vector<ll> q;
ll solve(ll y){
   return y*(y-1)*(y-2)/6;
}
signed main(){
   ll n;cin>>n;
   for(ll i=1;i<=n;i++){ 
   cin>>a[i]; sum[a[i]]++;
   if(vis[a[i]])continue;
   vis[a[i]]=1;q.push_back(a[i]);
   }
   ll ans=solve(n);
   for(ll i=0;i<q.size();i++){
     if(sum[q[i]]>=2) ans-=sum[q[i]]*(sum[q[i]]-1)*(n-sum[q[i]])/2;
     if(sum[q[i]]>=3) ans-=solve(sum[q[i]]);
   }
   cout<<ans;
}
复制代码

 

posted @   HHzp  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示