PIPIOJ 1060: PIPI的目标Ⅴ 枚举
程序员文章站
2022-04-01 17:27:30
...
题目:
http://39.106.164.46/problem.php?id=1060
思路:
枚举a,然后b和c再进行折半枚举,选出一个a+b+c最接近c的,记录下这个最大和。
代码如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#include<set>
#define MAX 1005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,t,a[MAX];
int main(){
while(cin>>n>>t){
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int maxl=-INF;
for(int i=0;i<n;i++){
int l=i+1,r=n-1;
while(l<r){
int tmp=a[i]+a[l]+a[r];
if(abs(t-tmp)<abs(t-maxl)){
maxl=tmp;
}
if(tmp<=t){
l++;
}else{
r--;
}
}
}
cout<<maxl<<endl;
}
return 0;
}