问题求解
本帖最后由 ExiaGN001 于 2022-8-23 22:34 编辑51nod 2540 平分 (查无此题)
考虑足球比分系统,一场足球比赛从开始到结束的过程中,摄像机随机拍摄了n张比分信息,问你本场比赛最多出现了几次平分。
例如:3个比分信息为:
2 0
3 1
3 4
最终比分为3:4,所以最多只可能出现最初的0:0以及3:3这2次平分。如果只有1张3:4,那么最多可能有0:0 1:1 2:2 3:3共4次平分。
输入
第一行一个数n。
接下来n行,每行两个数a[ i],b[ i],表示第i次拍摄时比分为a[ i]:b[ i]。
最后一次拍摄的比分即为最终比分。
n<=10000,a[ i],b[ i]<=10^9,a[ i],b[ i]保证不降。
输出
输出最多平分次数,包括开局的0:0。
输入样例
3
2 0
3 1
3 4
输出样例
2
模糊不清的官方题解:
给出的分数本身是有序的。为了简化思考,我们只考虑相邻的 2 个比分如何计数。
例如:从 2:5 到 8:10 ,可能出现的平分是 5:5,6:6,7:7,8:8 。 5=max(2,5),8=min(10,8) ,因此平分的数量是 min(a[ i],b[ i])-max(a,b)+1 。
但还存在另外一种情况,例如:从 2:5 到 3:6 ,其中不可能出现平分,也就是 min(a[ i],b[ i])-max(a,b)+1<0 的情况,这种情况下计数为 0 。
因此,我们可以推出一个 O(n) 的算法,统计最多可能的平分。
求C/C++解答!
(非水帖且有用回答会给予评分)
将在8月26日设置最佳答案 不知道对不对
int main()
{
int n,i=0,j=0,bf1=0,bf2=0,count=0;
scanf("%d",&n);
//int (*bf)=(int(*))malloc(n,sizeof(int)*2);
int minbf=0,maxbf=0;
for(i=0;i<n;i+=1)
{
scanf("%d:%d",&bf1,&bf2);
int m=bf1>bf2?bf2:bf1;
if(m>=maxbf)
{
if(count)count+=m-maxbf+1;
else
count=1;
}
maxbf=maxbf>bf1?maxbf:bf1;
maxbf=maxbf>bf2?maxbf:bf2;
}
printf("%d\n",count);
return 0;
}2
2:5 3:6
1
3
2:0
3:1
3:4
2
2
2:5
8:10
5
jhq999 发表于 2022-8-23 19:46
不知道对不对
感谢回复,但是还是与预期结果不符。
谢谢 去度娘家里做客就好 编程追风梦 发表于 2022-8-24 10:25
去度娘家里做客就好
查过有用的话就不会来问了(悲
页:
[1]