样例:
输入:
3
10
1 3 5
输出:
Yes
输入:
3
9
1 3 5
输出:
No
#include <bits/stdc++.h>
using namespace std;
const int MAX_N=51;
int k[MAX_N];
int kk[MAX_N * MAX_N];
int main()
{
int n, m; //n个数。取四次, 要求和为m;
cin >>n >>m;
for(int i=0;i<n;i++)
cin >> k[i];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
kk[ i*n + j] = k[i] + k[j];
}
sort(kk,kk+n*n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
if( binary_search( kk, kk+ n*n, m-k[i]-k[j] ) ){
cout << "Yes";
return 0;
}
}
cout << "No";
return 0;
}

本文介绍了一种通过预处理和二分查找实现的高效四数求和算法。该算法首先将所有可能的两数之和进行排序并存储,然后对于每一对数,使用二分查找来判断是否存在第三个数使得三个数之和等于指定的目标值。

513

被折叠的 条评论
为什么被折叠?



