本人思路 : 先找出第二小的防守队员与门线的距离,再依次与每个进攻队员与门线的距离比较判断有没有越位。
我们可以将每个守队员与门线的距离存在 p p p 数组里,将每个进攻队员与门线的距离存在 q q q 数组里。
然后对 p p p 数组排序,用第二小的防守队员与门线的距离 p 2 p_{2} p2 与 q i q_{i} qi 比较。
-
如果一旦发现 q i < p 2 q_{i} < p_{2} qi<p2,就算越位,输出
N
,且 f = 1 f = 1 f=1,标记输出过了。 -
如果 q i q_{i} qi 都大于 p 2 p_{2} p2,且 f = 0 f = 0 f=0,则没有越位,输出
Y
。
注意 : 每一次循环后 f f f 都要变回初始值 0 0 0。
参考代码 :
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m;
int kx, ky;
int f = 0;
int q[100005], p[100005];
int main()
{
while(scanf("%d %d", &n, &m) && n != 0 && m != 0)
{
for(int i = 1; i <= n; i ++) scanf("%d", &q[i]);//每个进攻队员与门线的距离
for(int i = 1; i <= m; i ++) scanf("%d", &p[i]);//每个守队员与门线的距离
sort(p + 1, p + m + 1);
for(int i = 1; i <= n; i ++)
{
if(q[i] < p[2])//判断是否越位
{
printf("Y\n");
f = 1;
break;
}
}
if(f == 0) printf("N\n");//判断是否输出过
f = 0;
}
return 0;
}