3个数和为0
二分加暴力
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <stdlib.h>
#include <malloc.h>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <bitset>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <string>
typedef long long ll;
using namespace std;
const int inf = 0x3f3f3f3f;
ll n;
ll a[1005];
ll b[1005];
ll check(ll l,ll r,ll x){
while(l<=r){
ll m=(l+r)/2;
if(a[m]>x){
r=m-1;
}
else if(a[m]<x){
l=m+1;
}
else{
return 1;
}
}
return 0;
}
int main(){
scanf("%lld",&n);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
int flag=0;
for(ll i=0;i<n;i++){
for(ll j=i+1;j<n;j++)
{
ll x=-(a[i]+a[j]);
if(check(j+1,n-1,x)){
printf("%lld %lld %lld\n",a[i],a[j],x);
flag=1;
}
}
}
if(!flag){
printf("No Solution\n");
}
return 0;
}