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

ImposterAnYu
I love barbara forever! | q3572195459 wx rzbxs3288,要电话请私信搬运于
2025-08-24 22:31:44,当前版本为作者最后更新于2021-08-26 10:08:25,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
解析
这道题可以用一个简单的模拟来做。
我们用 表示全场第 次得分的队伍, 表示第 次输入时间的分数, 表示第 次输入时间的秒数。
#include<bits/stdc++.h> using namespace std; int n,m = 1,i,x[105],a[105],b[105],ad,bd,s,t,st; int main(){ cin >> n; for(i = 1; i <= n; i++){ scanf("%d %d:%d",&x[i],&a[i],&b[i]); }紧接着,我们可以直接用 for 循环,直接模拟每一秒发生的事(是否在这一秒有得分记录)。
注意, 不能从 开始,因为有两个数据点会让一个队伍在 得分!
for(i = 0; i <= 2880; i++){ if(ad < bd){ t++; }else if(ad > bd){ s++; } if(i == a[m] * 60 + b[m]){ (x[m] == 1? ad++ : bd++); m++; } }最后,就可以直接输出了。
AC code
#include<bits/stdc++.h> using namespace std; int n,m = 1,i,x[105],a[105],b[105],ad,bd,s,t,st; int main(){ cin >> n; for(i = 1; i <= n; i++){ scanf("%d %d:%d",&x[i],&a[i],&b[i]); } for(i = 0; i <= 2880; i++){//模拟 48 分钟内的得分情况。 if(ad < bd){ t++; }else if(ad > bd){ s++; }//如果一队比另一队领先,领先队的领先时间 + 1秒。 if(i == a[m] * 60 + b[m]){ (x[m] == 1? ad++ : bd++); m++; }//如果有新的得分情况,就根据得分队伍来加分。 } printf("%02d:%02d\n%02d:%02d",s / 60,s % 60,t / 60,t % 60); //"%02d" 可以在输出的整数位数不足 2 位的时候,将不足的位用 0 补齐。 return 0; }
- 1
信息
- ID
- 6840
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者