D - Distinct Trio
D - Distinct Trio
题意:求三个数个各不相同的数目。
题解:正面考虑比较困难,可以反向思考,在总值上减去不符合的即可
#includeusing 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; }