题意:学校要举办一个舞会,每个人都要有自己的舞伴,要当对方舞伴的条件是会的舞蹈数量与对方会的舞蹈的数量相差不超过一个,有n个男生会的舞种已知,有m个女生会的舞种已知,问最多有多少对
#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[100];
int b[100];
int test01(int a[],int n,int x)
{
//举例1:求序列中的第一个大于等于x的元素的位置
int left=a[0];
int right=a[n-1];
while (left<right)//1,2,3,3,4,5,6
{
int mid=left+(right-left)/2;
if (a[mid]>=x)//说明x的位置在mid的左侧,小于mid
{
right=mid;
}
else left=mid+1;
}
return left;
}
int main(int argc, const char * argv[])
{
// insert code here...
int n,m,ans=0;//题目意思:有x个男生和y个女生,舞伴之间的舞技相差不超过1,问最多能组成多少对舞伴
//数据范围 (1 ≤ n ≤ 100) ,(1 ≤ m ≤ 100),(1 ≤ ai ≤ 100),(1 ≤ bj ≤ 100)
cin>>n;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
for (int i=0; i<n; i++)
{
cin>>a[i];
}
sort(a, a+n,less<int>());//按照从小到大的顺序进行排序
cin>>m;
for (int j=0; j<m; j++)
{
cin>>b[j];
}
sort(b, b+m, less<int>());
for (int i=0; i<n; i++)//1,2,4,6 1,5,5,7,9
{
for (int j=0; j<m; j++)//3,4,6 2,4,5
{
if (abs(a[i]-b[j])<=1)
{
if (a[i]!=-1&&b[j]!=-1)
{
ans++;
a[i]=-1;
b[j]=-1;
break;
}
}
}
}
cout<<ans;
}