1 条题解
-
0
自动搬运
来自洛谷,原作者为

Spectator
我趁有半天空档 / 为你跑一趟 / 城市里永远有宝藏搬运于
2025-08-24 22:28:38,当前版本为作者最后更新于2021-09-29 17:50:38,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
我们需要得到两个问题的答案:
- 上半场总共得了多少分?(整场比赛持续 分钟。)
- 发生多少次反超?(一次反超定义为一支队伍在得分小于对方后,经过投球使得得分超过对方。)
(1)我们首先来解决第一个问题: 由于整场比赛持续 分钟,所以上半场比赛共有 。那么只要 ,就要增加 。
(2)我们接着解决第二个问题: 我们可以先计算每一个时刻的分数。如果有队伍在之前的分数是小于对方,现在的分数是大于对方,那么这就是反超!
(其实真的很简单!!)但是,我们需要注意这种情况:A队分数 B队分数 3 4 4 5 这是不算反超的!!(因为B队一直都是领先A队的。)
#include<bits/stdc++.h> using namespace std; long long n,m,ans=0,anss=0,ld;//ld是记录当前谁领先(a=>1,b=>2) int a[3000],b[3000],jsa[3000],jsb[3000]; int main() { scanf("%lld",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); if(a[i]<=1440) ans++;//在上半场得分 jsa[a[i]]=1; } scanf("%lld",&m); for(int i=1; i<=m; i++) { scanf("%d",&b[i]); if(b[i]<=1440) ans++;//在上半场得分 jsb[b[i]]=1; } printf("%lld\n",ans); for(int i=1; i<=3000; i++) jsa[i]+=jsa[i-1],jsb[i]+=jsb[i-1];//记录每一个时刻的两队分数 for(int i=1; i<=3000; i++) { if(jsa[i]>jsb[i] && jsa[i-1]==jsb[i-1] && ld==2) //A队反超B队,且在之前是B队领先 anss++; if(jsa[i]<jsb[i] && jsa[i-1]==jsb[i-1] && ld==1) //B队反超A队,且在之前是A队领先 anss++; if(jsa[i]!=jsb[i]) //更新领先队伍 { if(jsa[i]>jsb[i]) ld=1; //A队领先 else ld=2; //B队领先 } } printf("%lld",anss); return 0; }
说明:By Xin。本人乃2016级小学生,思路比较简单,题解如有写的不好的地方请指正。
- 1
信息
- ID
- 6418
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者