KOŠARKA
Forgotten_freopen · · 题解
解析
这道题可以用一个简单的模拟来做。
我们用
#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;
}