【2020.2.29 模拟赛】T1 篮球积分 (模拟)

来源:JZOJ

题目描述

现在让我们假设,一场比赛中, N B A NBA 的篮球运动员将会每秒钟就投一个球。那时候将不再有任何防守、战术和篮球。

让我们想象一下在未来的一场 A A 队和 B B 队之间的比赛。

我们分别都知道 A A 队和 B B 队得到的分数和得到这些分数的确切秒数,并且每一秒钟,得分不会超过一分。

詹姆斯国王正在观察任务输入,并且希望回答下面这两个问题:

  1. 如果我们知道整场比赛持续 4 × 12 4×12 分钟,那么上半场比赛得分多少?

  2. 比赛期间发生了多少次“转机”,即一支落后球队(比分落后)有多少次反超领先球队(比分高的多)?

解题思路

  • emm,好像没有什么好讲的,总之就是枚举每一秒,模拟吧,有一点小细节处理一下就 o k ok

Code

#include <bits/stdc++.h>
using namespace std;
int a[5010],b[5010];
int main()
{
	freopen("preokret.in","r",stdin);
	freopen("preokret.out","w",stdout);
	int n;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		a[x]=1;   //第x秒a队进球
	}
	int m;
	scanf("%d",&m);
	for (int i=1;i<=m;i++)
	{
		int x;
		scanf("%d",&x);
		b[x]=1;   //第y秒b队进球
	}
	
	int ans=0;
	for (int i=1;i<=2*12*60;i++)
	{
		if (a[i]) ans++;
		if (b[i]) ans++;
	}
	printf("%d\n",ans);    //前半场总得分
	
	int A=0,B=0,p=0,sum=0;
	for (int i=1;i<=4*12*60;i++)
	{
		if (a[i]) A++;
		if (b[i]) B++;
		if (A>B)
		{
			if (p==2) sum++;  //A反超B
			p=1;
		}
		if (A<B)
		{
			if (p==1) sum++;  //B反超A
			p=2;
		}
	}
	printf("%d",sum);
	return 0;
}
发布了37 篇原创文章 · 获赞 41 · 访问量 5281

猜你喜欢

转载自blog.csdn.net/qq_43081996/article/details/104575529