D - Distinct Trio


D - Distinct Trio

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

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

#include
using namespace std;
typedef long long ll;
typedef pair pll;
const int N=5e5+50;
ll a[N];
ll sum[N],d,vis[N];
vector 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){
     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;
}