1 条题解

  • 1
    @ 2022-08-15 22:59:32
    #include<bits/stdc++.h>
    using namespace std;
    int t,n,m,j=1;
    int a[100005],b[100005];
    int read()//快读 
    {
        int ans=0,k=1;
        char c=getchar();
        while(!isdigit(c))
        {
            if(c=='-')k=-1;
            c=getchar();
        }
        while(isdigit(c))
        {
            ans=ans*10+c-'0';
            c=getchar();
        }
        return k*ans;
    }
    int main()
    {
        freopen("subtract.in","r",stdin);
        freopen("subtract.out","w",stdout);
        scanf("%d",&t);
        while(t--)
        {
            j=1;//b 数组的指针
            n=read(),m=read();
            for(int i=1; i<=n; i++)
                a[i]=read();
            for(int i=1; i<=m; i++)
                b[i]=read();
            n=unique(a+1,a+1+n)-a-1,m=unique(b+1,b+1+m)-b-1;//每次对两个数组去重
            sort(a+1,a+1+n),sort(b+1,b+1+m);//排序
            for(int i=1; i<=n; i++)//在 a 数组进行差集操作
            {
                while(j<=m/*j 指针必须要在 m 的范围内*/&&b[j]<=a[i]/*排完序后只要 b 数组还在 a 数组的范围内*/)
                {
                    if(b[j]==a[i])//对了就排除
                        break;
                    j++;//b 数组指针后移
                }
                if(b[j]!=a[i])//否则就输出
                    printf("%d ",a[i]);
            }
            printf("\n");
        }
        return 0;
    }
    
  • 1

信息

ID
1525
难度
4
分类
排序模拟 点击显示
标签
递交数
1
已通过
1
通过率
100%
上传者