首页 > 试题广场 >

#include us...

[单选题]
#include <iostream>
#include <map>

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
ans:对于x加的是0-1-2-0-3-0 ans:对于y加的是0-0-0-1-2-3 ans:对于(x,y)减的是0-0-0-0-1-0 所以最后结果就是12-1=11
发表于 2019-10-20 10:36:24 回复(3)

不会就选C哈哈

发表于 2019-08-23 00:28:57 回复(2)
这题目,用C的读取,C++的输出真是烧啊。----槽点

最笨的方法直接丢IDE结果为11
                                                          等号右边
ans += (xs[x]++);                           1  1  1  0  1  2
ans += (ys[y]++);                           1  2  3  2  2  2
ans -= (zs[make_pair(x, y)]++);     1  1  1  1  2  1【解析如下】

zs[make_pair(x,y)]这里是记录点出现的次数
(0,1)-------1
(0,1)-------1
(0,2)-------1
(-1,1)----1
(0,1)-------2
(1,1)-------1


make_pair ()构造一个pair()
 
18-7=11

-----C

发表于 2019-10-07 14:41:13 回复(2)
没明白 xs[]里有数吗  上来就++
发表于 2021-03-08 09:32:36 回复(1)
都加了括号了,还是不能先自增啊…
发表于 2020-04-12 21:18:02 回复(1)
xs[-1]难道不会溢出嘛😐
发表于 2021-05-04 11:52:25 回复(0)
没看懂。。
发表于 2021-04-15 20:05:47 回复(0)
累加不同数字出现的次数,次数从0开始加
0+1+2+0+3+0=6
0+0+0+1+2+3=6
0+0+0+0+1+0=1
发表于 2022-06-02 00:05:09 回复(0)

出现的次数

发表于 2020-02-15 08:13:48 回复(0)
有map就是11
发表于 2022-05-28 15:54:32 回复(0)

总结下来就是:

for(int i =0; i<n; i++) 
{ 
    ans = xs[i] + ys[i] - pair(x, y); 
}

再考虑,对应value值在自增过程中具体是多少。

编辑于 2021-05-18 21:35:01 回复(0)
这题其实就是考后自增
发表于 2020-11-14 22:01:11 回复(0)
算错了 注意是后++
发表于 2020-03-02 12:30:44 回复(0)
这道题手模都可以吧
发表于 2019-08-23 07:14:59 回复(0)