题目链接:点击打开链接
题意:给出 n 个数字,找出其中四个使得形成 a+b+c=d 的形式,求出最大的 d ,若不存在,则输出 no solution ;
题解:
按正常方法四个循环可得出,但肯定超时,所以需要换其他方法,可以先求出d - c 的值,然后按照二分求出 a + b的值,进而得出结果;
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
int n;
while(cin>>n&&n){
int a[1000+100];
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
int flag=0;
for(int i=n-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
int ans;
if(i!=j)
ans=a[i]-a[j];
int l=0,r=j-1;
while(l<r){
if(a[l]+a[r]==ans){
flag=1; break;
}
else if(a[l]+a[r]>ans){
r--;
}
else l++;
}
if(flag) break;
}
if(flag){
cout<<a[i]<<endl;
break;
}
}
if(flag==0) cout<<"no solution"<<endl;
}
return 0;
}