P2141 Solution

· · 题解

题目传送门

抢个题解求通过!

因为要求 a 数组中有多少个 a_i+a_j=a_k 这样的数,而 n\le 100,我们可以在输入的时候把 a 数组的每个元素用 f 数组标记为 true,然后双重循环遍历 a_ia_j,如果元素 a_i+a_j 被标记过,那么说明 a 中存在 a_k=a_i+a_j,答案加 1 并把这个标记取消,以防重复遍历到。最后输出答案。

#include <iostream>
using namespace std;

const int N = 105, M = 2e4 + 5;

int a[N];
bool f[M];

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        f[a[i]] = true;
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
        for (int j = i + 1; j <= n; j++)
            if (f[a[i] + a[j]])
            {
                ans++;
                f[a[i] + a[j]] = false;
            }
    cout << ans;
    return 0;
}