欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

相关标签: PIPIOJ