[COCI2019-2020#3] Preokret 题解

清风雪月

2021-12-04 20:57:20

Solution

第2篇题解,望通过

这里进入正题
首先,我们定义 a,b 为两队得分,n 为进球得分的次数。

int a,b,n;//注意,定义在int main()之前

然后,开始输入数据,同时,我们计算三问也从这部分开始。
看过题目的朋友们肯定知道,我们需要一个函数来读入每次进球,因此定义 x 为输入时需要知道的进球队伍。

int x;/*当然x定义在a,b,n旁边,
    这里只是为了方便大家了解过程
    */

接着,我们输入 x ,然后开始给 ab 增加。

for(int i=1;i<=n;i++)
    {
        cin>>x;
        if(x==1)a++;
        else b++;

为了完成第二问,我们需要一个数来统计打平次数,定义它为 sum1,也定义在上面。同时注意,初始比分 0:0 也算作一次打平。

int sum=1;

那么怎么判断是否打平呢?很简单,如果 a=b,那么他们就打平了。

if(a==b)sum1++;

接下来最难的就是第三问,如何判断一个队是否翻盘呢?
我们可以这样判断,如果一队比另外一队进球数少,我们就给它做上一个标记,如果它已经有标记了,那么就根据当前进球的队,我们来判断是否翻盘个数增加,这一步,我们需要融合前面每队进球来进行。同时,我们定义 a flagbflag 来做标记。

bool a_flag=false,b_flag=false;

这时,我们需要一个值来进行增加翻盘个数,定义 fafb

int fa,fb;

如果看懂了的话,应该可以做了,这里就不放代码了。