分析:
本题只要模拟A、B两队罚点球的过程,并根据点球大战的规则来判定即可
用ta和tb存储A、B两队在点球大战中的得分。在第1个阶段的每一轮,A队先罚点球罚中则ta加1;紧接着马上根据以下规则判断点球大战是否可以提前结束:如果ta>tb,就假设剩下点球B全部罚进、A全部罚不进,B还是输;或者如果ta<tb,就假设剩下点球A全部罚进、B全部罚不进,A还是输。如果属于这2种情形之一,点球大战就提前结束了,比分锁定为ta:tb。如果点球大战没有结束,这一轮接下来B罚点球,罚中则tb加1;紧接着还是按照上述规侧判断点球大战是否会提前结束
如果能进入第2个阶段,处理就容易得多了,每一轮都是A先罚、B后罚,每一轮结束之后如果比分不同,点球大战就结束了
代码如下:
#include<iostream>
using namespace std;
int a[22], b[22]; //A,B两队罚点球的数据(1表示罚进)
int ta, tb; //A,B两队的得分
int main(){
bool over = false; //点球大战是否结束
int n = 0;
for(int i=1;i<=20;i++){
cin >> a[i];
}
for(int i=1;i<=20;i++){
cin >> b[i];
}
for(int i=1;i<=5;i++){
if(a[i]) ta++; //A队罚进点球
if(ta>tb){ //A队领先
//假设剩下点球B全部罚进,A队全部罚不进,B还是输
if(ta>tb+5-i+1){
over = true; n = i; break;
}
}
else if(ta<tb){ //A队落后
//假设剩下点球A全部罚进,B全罚不进,A还是输
if(ta+5-i<tb){
over = true; n = i; break;
}
}
else ;
if(b[i]) tb++; //B队罚进点球
if(ta>tb){ //A队领先
//假设剩下点球B全部罚进,A队全部罚不进,B还是输
if(ta>tb+5-i){
over = true; n = i; break;
}
}
else if(ta<tb){ //A队落后
//假设剩下点球A全部罚进,B全罚不进,A还是输
if(ta+5-i<tb){
over = true; n = i; break;
}
}
else ;
}
if(over){
cout << n << endl << ta << ":" << tb << endl;
return 0;
}
for(int i=6;i<=20;i++){
if(a[i]) ta++;
if(b[i]) tb++;
if(ta!=tb) {
n = i; over = true; break;
}
}
cout << n << endl << ta << ":" << tb << endl;
return 0;
}