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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】