1 条题解
-
0Guest LV 0 MOD
-
1
#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