递增数列中找和为s乘积最小的两个数

来源:互联网 发布:java 浏览器 编辑:程序博客网 时间:2024/06/04 14:07
#include<cstdio>void getSumKPair(int *arr, int n, int k, int &a, int &b){    int nLow, nHigh;    long long product;    nLow = 0, nHigh = n-1;    a = b = -1, product = 0x7fffffff;    int flag=0;    while(nLow < nHigh)    {        if(arr[nLow] + arr[nHigh] == k )        {            if(!flag){            a = nLow;            b = nHigh;            product = arr[a] * arr[b];            ++nLow, --nHigh;        }        else if(arr[nLow] + arr[nHigh] < k)            ++nLow;        else            --nHigh;    }}const int MAX = 1000005;int arr[MAX];int main(){    int n, k, a, b;    while(scanf("%d %d", &n, &k) != EOF)    {        for(a = 0; a < n; ++a)            scanf("%d", &arr[a]);        getSumKPair(arr, n, k, a, b);        if(a == -1)            puts("-1 -1");        else        {            a = arr[a];            b = arr[b];            if(a > b)                printf("%d %d\n", b, a);            else                printf("%d %d\n", a, b);        }    }    return 0;}

0 0
原创粉丝点击