PTA_L1-020 apuesto a ningún amigo (20 puntos)

L1-020 no apuesto a amigos

Cuando los azules ocupados fotos enviará en mi círculo de amigos, siempre hay algunas personas a causa de apuestos y sin amigos. Esta pregunta se requiere para identificar a aquellos apuesto a ningún amigo.
Formato de entrada:
entrada de la primera fila se le da un número entero positivo N (≦ 100), es el número de amigos conocidos círculo, entonces N filas, cada primera fila se le da un número entero positivo K (≤1000), como un círculo de amigos número, entonces todo de un círculo de listas de amigos - por conveniencia, cada uno correspondiente a un número de ID, los dígitos 5, entre el ID de la partición (de 00.000 a 99.999) por un espacio, después de un número entero positivo dado M ( ≤10000), como el número de personas que se preguntó; fila luego de cotización de M ID a ser consultado, separadas por un espacio.

Nota: no hay amigos que simplemente no se puede instalar el "círculo de amigos", puede ser sólo una persona en su propio círculo de amigos. Aunque hay narcisistas individuales son dueños de su propio círculo de amigos agregados en varias ocasiones, pero el problema de asegurar que todos los K más de un círculo de amigos tiene al menos dos personas diferentes.
Los formatos de salida:
entrada de forma secuencial a la salida de los que no lo guapo amigos. Con un espacio entre el ID de la partición, y la fila última puede no tener espacio extra. Si nadie es guapo, la salida Nadie es guapo.
Nota: La misma persona puede ser consultado en varias ocasiones, pero sólo una vez salida.

Ejemplo de entrada 1:

3
3 11 111 22 222 55 555
2 33 333 44 444
4 55 555 66 666 99 999 77 777
8
55 555 44 444 10 000 88 888 22 222 11 111 23 333 88 888

Muestra de Producto 1:

10000 88888 23333

Ejemplo de entrada 2:

3
3 11 111 22 222 55 555
2 33 333 44 444
4 55 555 66 666 99 999 77 777
4
55 555 44 444 22 222 11 111

Muestra Producto 2:

Aquí hay una cita

código completo:

#include<iostream>
#include<cstdio>
using namespace std;
int a[100010];
int main()
{
    int n,x;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int k;
        cin>>k;
        for(int j=0;j<k;j++)
        {
            cin>>x;
            if(k>1)             //如果不是只有自己
            {
                a[x]++;
            }
        }
    }
    int m,flag=0;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>x;
        if(a[x]==0)
        {
            a[x]=1;                 //不输出重复的
            if(flag==0)
            {
                printf("%05d",x);   //是一个五位数,输入的时候可能有前导零,所以输出的时候补齐前导零
            }
            else
            {
                printf(" %05d",x);
            }
            flag=1;
        }
    }
    if(flag==0)
        cout<<"No one is handsome"<<endl;
    else
        printf("\n");
    return 0;
}

Enlace a la pregunta original:
https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448


Pequeño registro:
(no se preocupan por ellos)

/*这个是错误的,上面的那个是正确的。*/
/**
    前两个样例是对的,后面三个是错的。
    后来我发现我读错题了。
    开始我理解的是,输入n组,每组k个元素,然后再输m个元素,
    输出m个元素中和n*k不同的元素
    后来看了别人的才知道理解错了,不能光看样例不好好读题。
    (因为我觉得我的思路我觉得很好,所以我将这个代码保留了下来。纪念一下我当时的思路。)
*/
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int b[10010];
int c[100010];
int d[10010];
int main()
{
    int n;
    cin>>n;
    int x=0;
    for(int i=0;i<n;i++)
    {
        int k;
        cin>>k;
        for(int j=0;j<k;j++)
        {
            cin>>a[j];
            c[x++]=a[j];            //所有的数字拿数组c存起来
        }
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>b[i];
    }
    sort(c,c+x);                //数组c中的元素排序
    int y=unique(c,c+x)-c;      //数组c中的元素去重
    int z=0;
    for(int i=0;i<m;i++)        //然后和b中的比较,如果相同就把b中的元素改为1,并且z计数器记录了有几个相同元素
    {
        for(int j=0;j<y;j++)
        {
            if(b[i]==c[j])
            {
                b[i]=0;
                z++;
                break;
            }
        }
    }
    //去掉b中的重复元素
    int w=0;
    int q;
    for(int i=0;i<m;i++)
    {
        for(q=0;q<w;q++)
        {
            if(b[i]==d[q])
            {
                break;
            }
        }
        if(q==w)
        {
            d[w]=b[i];
            w++;
        }
    }
    if(z==m)
    {
        cout<<"No one is handsome"<<endl;
    }
    else
    {
        for(int i=0;i<w;i++)
        {
            if(d[i]!=0)             //输出d中不为0的数字(最后一位可能是0)
            {
                if(i!=w-1)          //由于是个五位数,输出时记得前面补前导零
                {
                    printf("%05d ",d[i]);
                }
                else
                    printf("%05d\n",d[i]);
            }
        }
    }
    return 0;
}

Publicado 70 artículos originales · ganado elogios 79 · vistas 3966

Supongo que te gusta

Origin blog.csdn.net/qq_45856289/article/details/104825062
Recomendado
Clasificación