第一题:T1两数归零
标签:
S
T
L
、
m
a
p
STL、map
STL、map
题意:给定
n
n
n个整数
a
1
,
a
2
,
a
3
,
.
.
.
,
a
n
a_1,a_2,a_3,...,a_n
a1,a2,a3,...,an,请统计有多少二元组
i
,
j
i,\ j
i, j满足
i
<
j
i < j
i<j 且满足
a
i
+
a
j
=
0
a_i+a_j=0
ai+aj=0。
数据范围:
1
<
=
n
<
=
300000
1<=n<= 300000
1<=n<=300000,
−
1
,
000
,
000
,
000
≤
a
i
≤
1
,
000
,
000
,
000
−1,000,000,000≤a_i≤1,000,000,000
−1,000,000,000≤ai≤1,000,000,000
题解:直接从前往后遍历一遍,到第
i
i
i个数
a
i
a_i
ai的时候,看看前面出现过的相反数
−
a
i
-a_i
−ai有多少个,把计数加上去,最后就是答案了。该题
a
i
a_i
ai数据范围比较大,并且有负数,所以我们需要用
m
a
p
map
map维护一下。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[300005];
map<int, int> m;
int main() {
int n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
ans += m[-a[i]];
m[a[i]]++;
}
cout << ans << endl;
return 0;
}