Codeforces Round #495 (Div. 2)
C.Sonya and Robots
=
这道题目唯一的问题就是如何去重。
首先,对于数列中两个相同的数,
前面元素所成的数对,
后面元素一定都能造出。
那么我们就有了一个思路,
相同的数只需要算最后一个,
而前面的显然全部重复。
可以使用 set 维护,
然后代码就不难写出了。
#include<bits/stdc++.h>
#define BetterIO ios::sync_with_stdio(false)
using namespace std;
#define int long long
#define MAX 100001
int N,Ret,A[MAX],Cnt[MAX];
set< int >Set;
signed main(void)
{
BetterIO;
register int i;cin>>N;
for(i=1;i<=N;i++)cin>>A[i];
for(i=1;i<=N;i++)Ret-=Cnt[A[i]],Ret+=(Cnt[A[i]]=Set.size()),Set.insert(A[i]);
cout<<Ret<<endl;
return 0;
}