[COCI2019-2020#3] Preokret 题解

清风雪月

2021-12-04 20:57:20

Solution

第2篇题解,望通过 ------------ 这里进入正题 首先,我们定义 $a,b$ 为两队得分,$n$ 为进球得分的次数。 ```cpp int a,b,n;//注意,定义在int main()之前 ``` 然后,开始输入数据,同时,我们计算三问也从这部分开始。 看过题目的朋友们肯定知道,我们需要一个函数来读入每次进球,因此定义 $x$ 为输入时需要知道的进球队伍。 ```cpp int x;/*当然x定义在a,b,n旁边, 这里只是为了方便大家了解过程 */ ``` 接着,我们输入 $x$ ,然后开始给 $a$ 和 $b$ 增加。 ```cpp for(int i=1;i<=n;i++) { cin>>x; if(x==1)a++; else b++; ``` 为了完成第二问,我们需要一个数来统计打平次数,定义它为 $sum1$,也定义在上面。同时注意,初始比分 $0:0$ 也算作一次打平。 ```cpp int sum=1; ``` 那么怎么判断是否打平呢?很简单,如果 $a=b$,那么他们就打平了。 ```cpp if(a==b)sum1++; ``` 接下来最难的就是第三问,如何判断一个队是否翻盘呢? 我们可以这样判断,如果一队比另外一队进球数少,我们就给它做上一个标记,如果它已经有标记了,那么就根据当前进球的队,我们来判断是否翻盘个数增加,这一步,我们需要融合前面每队进球来进行。同时,我们定义 $a$ _ $flag$ 和 $b$_$flag$ 来做标记。 ```cpp bool a_flag=false,b_flag=false; ``` 这时,我们需要一个值来进行增加翻盘个数,定义 $fa$ 和 $fb$。 ```cpp int fa,fb; ``` 如果看懂了的话,应该可以做了,这里就不放代码了。