D - la mitad de la práctica

Descripción

darle una secuencia, y luego le dan m elementos, por lo que encontrar el más cercano a cada elemento de la salida digital de la secuencia, si hay dos salidas de dos.

Entrada

De entrada una pluralidad de conjuntos, la primera línea le da dos números de n (0 <n <10 millones), m (0 <m <n), seguido por el número n de columnas, y a continuación, introduzca los m elementos, por lo que encontrar más cercano al valor de cada elemento. Si hay dos, de pequeño a grande de la salida.

Salida

Este valor m más cercano al número de salidas de cada elemento, la salida de una línea en blanco entre los grupos.
muestra

Entrada

8 4
1 2 3 4 5 6 8 11
4
9
2
7
Salida

4
8
2
6 8

#include <stdio.h>
#include <string.h>
#include<algorithm>
using namespace std;
int a[10000010];
int main()
{
    int n,m,k;
    while(~scanf("%d %d",&n,&m))
    {
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        int flag;
        while(m--)
        {
            scanf("%d",&k);
            if(k>a[n-1])
                printf("%d\n",a[n-1]);
            else if(k<a[0])
                printf("%d\n",a[0]);
            else
            {
                int mid;
                int l=0,r = n-1;
                flag = 0;
                while(l<=r)
                {
                    mid = (l+r)/2;
                    if(k<a[mid])
                        r = mid-1;
                    else if(k>a[mid])
                        l = mid+1;
                    else
                    {
                        flag = 1;
                        break;
                    }

                }
                if(flag)
                    printf("%d\n",k);
                else
                {
                    if(k-a[r] == a[l]-k)
                        printf("%d %d\n",a[r],a[l]);
                    else if(k-a[r] < a[l]-k)
                        printf("%d\n",a[r]);
                    else
                        printf("%d\n",a[l]);
                }
            }
        }
        printf("\n");
    }
    return 0;
}


Publicados 176 artículos originales · ganado elogios 7 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/Fusheng_Yizhao/article/details/104929247
Recomendado
Clasificación