题意:这是一道配对题,输入数组a,数组b(个数不必相同),要求凑成一对的两个数|a-b|不大于1。求最多能配出多少对。
题解:这是一道贪心题,希望能够尽可能多的配对。第一步,排序:这样能过从小的开始比。如果能过满足条件,就计入答案,就比较下一组数,如果一方的数大于另一方,就让小的那一方,向后移一个数,再和大的那个数比较,直到满足条件。
ACcode:
int main()
{
int n, m,t=0;
int a[110], b[110];
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cin >> m;
for (int i = 0; i < m; i++)
cin >> b[i];
sort(a, a + n);
sort(b, b + m);
int boy=0, girl=0;
while(boy<n&&girl<m)
{
if (abs(a[boy] - b[girl]) <= 1)//如果满足条件
{
boy++;
girl++;
t++;
}
else if (a[boy] - b[girl] > 1)//女生等级偏低时
girl++;
else if (b[girl] - a[boy] > 1)//男生等级偏低时
boy++;
}
cout << t;
return 0;
}