C++基础题,OJ刷题

题目描述

在遥远的佐希克大陆,充满着宗教与魔法,每个人都信仰着一个宗教,信仰相同宗教的人两两之间会产生魔法心灵感应。
现在有N个人站成一排,第i个人信仰的宗教为Ai。现在请你求出,总共有多少对人会产生魔法感应。
输入

第一行一个整数N,表示接下来有N个人。
接下来N行,每行一个整数Ai,表示第i个人信仰的宗教为Ai。
1 <= N <= 1000000; 1 <= Ai <= 1000000;
输出

输出一个整数,表示总共会有多少对人,能够产生魔法感应
样例输入
10
3
2
5
4
2
6
1
3
5
2
样例输出
5
提示

样例中,N个人的信仰依次为 {3, 2, 5, 4, 2, 6, 1, 3, 5, 2}
1、8会产生魔法感应
2、5会产生魔法感应
3、9会产生魔法感应
5、10会产生魔法感应
2、10会产生魔法感应
共有5对人会产生魔法感应

#include <bits/stdc++.h>

using namespace std;
const int MAXN = 1000000;
int count[MAXN + 5];
int main() {
    int N;
    scanf("%d",&N);
    int ans = 0;

    for (int i = 0; i < N; i++) {
        int a;
        scanf("%d",&a);
        ans += count[a];
        count[a]++;
    }

    printf("%d",ans);

    return 0;
}

答案错误,11%,请问如何改正


#include <iostream>
#include <unordered_map>

using namespace std;

int main() {
    int N;
    cin >> N;
    unordered_map<int, int> count;
    int ans = 0;

    for (int i = 0; i < N; i++) {
        int a;
        cin >> a;

        ans += count[a];
        count[a]++;
    }

    cout << ans;

    return 0;
}

不会也是要用 scanf 和 printf 吧?