SP2178 OFFSIDE - He is offside!

本文介绍了一种使用C++编程语言实现的足球越位判定方法,通过计算防守队员和进攻队员与门线的距离,利用排序和比较操作来判断是否发生越位。
摘要由CSDN通过智能技术生成

本人思路 : 先找出第二小的防守队员与门线的距离,再依次与每个进攻队员与门线的距离比较判断有没有越位。

我们可以将每个守队员与门线的距离存在 p p p 数组里,将每个进攻队员与门线的距离存在 q q q 数组里。

然后对 p p p 数组排序,用第二小的防守队员与门线的距离 p 2 p_{2} p2 q i q_{i} qi 比较。

  1. 如果一旦发现 q i < p 2 q_{i} < p_{2} qi<p2,就算越位,输出 N,且 f = 1 f = 1 f=1,标记输出过了。

  2. 如果 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;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值