专栏文章

P2141 Solution

P2141题解参与者 43已保存评论 47

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
47 条
当前快照
1 份
快照标识符
@miqmf9db
此快照首次捕获于
2025/12/04 07:11
3 个月前
此快照最后确认于
2025/12/04 07:11
3 个月前
查看原文
抢个题解求通过!

因为要求 aa 数组中有多少个 ai+aj=aka_i+a_j=a_k 这样的数,而 n100n\le 100,我们可以在输入的时候把 aa 数组的每个元素用 ff 数组标记为 true,然后双重循环遍历 aia_iaja_j,如果元素 ai+aja_i+a_j 被标记过,那么说明 aa 中存在 ak=ai+aja_k=a_i+a_j,答案加 11 并把这个标记取消,以防重复遍历到。最后输出答案。
CPP
#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;
}

评论

47 条评论,欢迎与作者交流。

正在加载评论...