标签:排序 步骤 mes 就是 mamicode col space bsp amp
重演到第7场啦~撒花~
这是一道简单的模拟题,但是要稍微想一下循环的顺序~~
给出男生的编号和女生的编号(编号可以重复)
两两配对的条件需要满足abs(a[i]-b[i])<=1;
也就是最大相差不能超过1;
如果不排序的话,模拟的步骤就是两个循环:
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){.....}
ans=max{ans,num}
但是这样显然是!不可取的!
要先将男生和女生分别排序,由于他们的匹配条件
比如说
男生是:3 6 8
女生是:5 9 20
先让3和5配对,如果不行的话,继续往下,3再和9,20配对,也不行
发现无法配对
则6开始配对,6和5可以配对,下一次开始配对的时候,就从9开始,不用再往回看了
因为对于8来说,它是不可能与小于5的数再进行配对了,因为它是大于6的
6可以,那么8就不可以了
举了一个不太好的例子
上代码吧
1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[105], b[105],ans,pos; 4 int main(){ 5 int n, m; 6 cin >> n; 7 for (int i = 0; i < n;i++) 8 cin >> a[i];
cin>>m; 9 for (int i = 0; i < m;i++) 10 cin >> b[i]; 11 sort(a, a + n); 12 sort(b, b + m); 13 for (int i = 0; i < n;i++){ 14 for (int j = pos; j < m;j++){ 15 if(a[i]-b[j]<=1&&a[i]-b[j]>=-1){ 16 ans++; 17 pos = j + 1; 18 break; 19 } 20 } 21 } 22 cout << ans; 23 return 0; 24 }
这里唯一的点就是pos=j+1;j=pos这个地方,前面匹配过的,后面就不用再看了
标签:排序 步骤 mes 就是 mamicode col space bsp amp
原文地址:https://www.cnblogs.com/guaguastandup/p/10425872.html