首页 > 试题广场 >

则上述程序输出为( )

[单选题]
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
scanf("%d", &n);
map <int, int> xs;
map <int, int> ys;
map < pair <int, int>, int > zs;
long long ans = 0;
for (int i = 0; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
ans += (xs[x]++);
ans += (ys[y]++);
ans -= (zs[make_pair(x, y)]++);
}
cout << ans << endl;
return 0;
}
输入:
6
0 0
0 1
0 2
-1 1
0 1
1 1
则上述程序输出为( )
  • 9
  • 10
  • 11
  • 12
map记录的是不重复的key,因此函数运行计算过程是这样的:
因此对于xs,0出现4次,所以xs[0]变化的记录为: 0 + 1 + 2 + 3 = 6,xs[-1]xs[1] 都只出现一次所以为0;
同样对于ys,1出现4次,所以ys[1]变化的记录为:0 + 1 + 2 + 3 = 6,ys[0]ys[2] 都只出现一次所以为0;
另外对于zs(0 1)出现2次,所以zs[(0 1)]变化的记录为:0 + 1 = 1,zs的其他key都只出现一次是所以为0;
所以最终 ans = 6 + 6 - 1 = 11。
编辑于 2019-09-16 19:30:38 回复(0)
出现0:+0+1+2+3=6   出现1:+0+1+2+3=6   出现0 1   -0-1=-1    所以ans  = 12 - 1 = 11
发表于 2019-09-16 10:37:09 回复(0)