本题是排序基础题。
我们可以将a[i]、b[i]分别从小到大排序后,依次枚举比较两两组合是否符合要求,最后输出答案ans即可。
AC代码:
1 #include <bits/stdc++.h>//万能头文件 2 3 using namespace std;//使用标准名字空间 4 5 inline int read()//快速读入 6 { 7 int f=1,x=0; 8 char c=getchar(); 9 10 while(c<'0' || c>'9') 11 { 12 if(c=='-')f=-1; 13 c=getchar(); 14 } 15 16 while(c>='0' && c<='9') 17 { 18 x=x*10+c-'0'; 19 c=getchar(); 20 } 21 22 return f*x; 23 } 24 25 int m,n,a[110],b[110],ans;//定义变量,含义如分析 26 27 int main() 28 { 29 n=read(); 30 31 for(register int i=1; i<=n; i++)a[i]=read(); 32 33 m=read(); 34 35 for(register int j=1; j<=m; j++)b[j]=read(); 36 37 //以上为输入 38 39 sort(a+1,a+1+n);//对男生进行从小到大排序 40 sort(b+1,b+1+m);//对女生进行从小到大排序 41 42 for(register int i=1; i<=n; i++) //枚举男生 43 { 44 for(register int j=1; j<=m; j++) //枚举女生 45 { 46 if(abs(a[i]-b[j])<=1)//如果满足题目中的条件 47 { 48 ++ans;//更新答案 49 50 b[j]=1000;//因为该女生已经有了舞伴,所以将女生设为不可能再匹配 51 52 break;//由于该男生已经有了舞伴,就枚举下一个男生 53 } 54 } 55 } 56 57 printf("%d",ans);//输出答案 58 59 return 0;//结束 60 }