加班狗:军团

题面

土豆游戏公司最新3A大作《加班狗:军团》发售啦!

本作设定在赛博朋克风格的虚构未来都市鹅城。鹅城被堕落的资本垄断巨头所掌控,腐败的北山法院强行通过了无限制加班法,迫使所有平民变成加班狗,为强大的剥削集团贡献出所有剩余价值。玩家的任务就是组建力量反抗压迫。

本作的特色在于玩家能够完全自由地去“扮演任何一个人”。鹅城的每一个市民都是完全拟真的、拥有日常生活和背景故事的个体,而玩家可以从市民中招募任何人成为队友并进行扮演。从点到为止的太极大师到不讲武德的健身达人,任何人都能加入抵抗组织成为觉醒的打工人。

游戏上线后,玩家们都对其创新玩法十分感兴趣,但可惜的是,由于土豆游戏公司企业文化的传统艺能,《加班狗:军团》在发售几天后就出现了恶性BUG——队友的坐标距离计算系统在特定情况下会出现异常。

由原本的欧氏距离√(xi−xj)2+(yi−yj)2(xi−xj)2+(yi−yj)2

变成曼哈顿距离|xi−xj|+|yi−yj||xi−xj|+|yi−yj|玩家群体之间流传着该BUG十分诡异的传说,据说只有在角色吃掉一万个土豆的情况下才有概率发生,但开发组却一直找不到具体成因,因此需要立即收集错误信息进行研究。已知每次可能出现BUG的距离计算都是在某一对坐标间发生的,所以可以先把无法确定是否发生异常的坐标对筛选出来,以尽量缩小排查错误的范围。

于是你作为土豆游戏公司的加班程序员被分配到了这个紧急任务——统计不管是否发生异常,距离计算结果都一样,即欧氏距离和曼哈顿距离相同的坐标对的数量。

输入数据

第一行输入是一个整数 Q (1 ≤ Q ≤ 10),表示总共有 Q 组数据。

对于每组数据,第一行输入是一个整数 n (1 ≤ n ≤ 200,000),表示目前游戏中有 n 位队友。

接下来的 n 行,每行包括两个整数 xi 和 yi (| xi |, | yi | ≤ 10^9),表示每位队友的坐标。同样由于土豆游戏公司的传统艺能,游戏角色之间可能发生穿模,因此坐标可能重合。

保证Q 组数据中n 的总和不超过 200,000,即Q∑i=1ni≤200,000∑i=1Qni≤200,000

输出数据

输出不管是否发生异常,距离计算结果都一样,即欧氏距离和曼哈顿距离相同的坐标对的数量。每组样例之间用回车隔开。

输入示例
2 3 1 1 7 5 1 5 6 0 0 0 1 0 2 -1 1 0 1 1 1
输出示例
2 11
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int Q;
    cin >> Q;
    for (int m = 0; m < Q; m++)
    {
        long long int count = 0;
        long long int n;
        cin >> n;
        map<long long int, int> x_pos;
        map<long long int, int> y_pos;
        map<pair<long long int, int>, int > node;
        for (int i = 0; i < n; i++)
        {
            long long int x, y;
            cin >> x >> y;
            count -= node[pair<long long int, int>(x, y)];
            node[pair<long long int, int>(x, y)]++;
            if (x_pos.count(x))
            {
                count += x_pos[x];
            }
            x_pos[x]++;
            if (y_pos.count(y))
            {
                count += y_pos[y];
            }
            y_pos[y]++;
        }
        cout << count << endl;
    }
}
posted @ 2021-11-09 00:58  Exungsh💫  阅读(110)  评论(0编辑  收藏  举报