CF489B 1200 *

题意

解析

如果对于一个 a 数列中的一个最小的数a[x],它可能和多个在 b 数列的数相匹配,显然,我需要先试试 b 数列中最小的一个 b[y],如果可行,那么赶紧配对,再试试 a 数列中第 2 小和 b 数列中第 2 小的;否则,如果 a[x] >b[y] 说明既然 b 数列最小的已经不行了,那么我们就要再次将最小的和 a 匹配,反之亦然,最后以此类推,发现只是一个不断找最小值的过程,所以就要先排序。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200 + 10,M = 1e6 + 10;
int n,m,a[N],b[N];
int main(){
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> a[i];
    }
    sort(a+1,a+1+n);
    cin >> m;
    for(int i=1;i<=m;i++){
        cin >> b[i];
    }
    sort(b+1,b+1+m);
    
    int pos1 = 1,pos2 = 1,res = 0;
    while(pos1 <= n && pos2 <= m){
        if(abs(a[pos1] - b[pos2]) <= 1){
            res++;
            pos1++;
            pos2++;
        }else if(a[pos1] < b[pos2] - 1) {
            pos1++;
        }else{
            pos2++;
        }
    }
    cout << res;

    return 0;
}
posted @   Isaac233  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示