Codeforces 131 B. Opposites Attract

問題

n人の人がいて、それぞれ値t[i]をもっている。
t[i]=-t[j]であるような二人i,j(ただしi≠jとする)はペアを作ることができる。


ペアは何通りできるか求めよ。

制約条件

n≦10^5

  • 10≦t≦10

方針

nが大きいので、t[i]の値の出現頻度を数えて掛け算して求める。
intオーバーフローに注意。

ソースコード

int n; ll cnt[30];

void run()
{
	cin>>n;
	rep(i,n){
		int t; cin>>t;
		cnt[t+10]++;
	}
	ll ans=cnt[10]*(cnt[10]-1)/2;
	rep(i,10)ans+=cnt[i]*cnt[20-i];
	cout<<ans<<endl;
}