0
点赞
收藏
分享

微信扫一扫

1801 蹄子剪刀布(枚举)

舟海君 2022-02-24 阅读 41
算法

1. 问题描述:

你可能听说过"石头剪刀布"的游戏。这个游戏在牛当中同样流行,它们称之为"蹄子剪刀布"。游戏的规则非常简单,两头牛相互对抗,数到三之后各出一个表示蹄子,剪刀或布的手势。蹄子赢剪刀,剪刀赢布,布赢蹄子。例如,第一头牛出“蹄子”手势,第二头牛出“布”手势,则第二头牛获胜。如果两头牛出相同的手势,则算平局。农夫约翰的两头奶牛正在进行 N 轮“蹄子剪刀布”对抗,他看的十分入迷。不幸的是,虽然他可以看到奶牛正在做出三种不同类型的手势,但他却无法分辨出哪一个代表“蹄子”,哪一个代表“布”以及哪一个代表“剪刀”。不知道这三种手势的具体含义的情况下,农夫约翰给这三种手势分配了编号 1,2,3。手势 1 可能代表“蹄子”,可能代表“剪刀”,也可能代表“布”,反正他傻傻分不清楚。给出两头奶牛在 N 场比赛中所做出的具体手势对应的编号,请你判断第一头奶牛最多可能赢多少盘对抗。

输入格式

第一行包含整数 N。接下来 N 行,每行包含两个整数(1 或 2 或 3),表示两头奶牛在一轮对抗中所出的手势对应的编号。

输出格式

输出第一头奶牛可能获胜的最大场次数。

数据范围

1 ≤ N ≤ 100

输入样例:

5
1 2
2 2
1 3
1 1
3 2

输出样例:

2
样例解释
此样例的一种解决方案是,1 表示剪刀,2 表示蹄子,3 表示布。这样,第一头奶牛可以赢得 (1,3) 和 (3,2) 两场比赛。
来源:https://www.acwing.com/problem/content/description/1803/

2. 思路分析:

分析题目可以知道我们实际上可以枚举石头剪刀布可能的6种情况,并且进一步可以发现其实就只有两种情况(每三种情况属于同一种方案),我们可以列出对应的情况判断在什么情况下第一头牛可以胜出:

3. 代码如下:

class Solution:
    def process(self):
        n = int(input())   
        # 分别记录属于哪一种情况
        a = b = 0
        for i in range(n):
            x, y = map(int, input().split())
            # x, y先减去1这样比较好处理
            x -= 1
            y -= 1
            # 减1和加2的对于3的余数是一样的
            if (x + 2) % 3 == y:
                a += 1
            elif (x + 1) % 3 == y:
                b += 1
        return max(a, b)


if __name__ == '__main__':
    print(Solution().process())
举报

相关推荐

0 条评论