[NOIP2014 提高组] 生活大爆炸版石头剪刀布#洛谷

题目背景

NOIP2014 提高组 D1T1

题目描述

石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。

升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:

斯波克:《星际迷航》主角之一。

蜥蜴人:《星际迷航》中的反面角色。

这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。

[NOIP2014 提高组] 生活大爆炸版石头剪刀布#洛谷_第1张图片

现在,小 A 和小 B 尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小 A 以 石头-布-石头-剪刀-蜥蜴人-斯波克 长度为 6 6 6 的周期出拳,那么他的出拳序列就是 石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-...,而如果小 B 以 剪刀-石头-布-斯波克-蜥蜴人 长度为 5 5 5 的周期出拳,那么他出拳的序列就是 剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-...

已知小 A 和小 B 一共进行 N N N 次猜拳。每一次赢的人得 1 1 1 分,输的得 0 0 0 分;平局两人都得 0 0 0 分。现请你统计 N N N 次猜拳结束之后两人的得分。

输入格式

第一行包含三个整数: N , N A , N B N,N_A,N_B N,NA,NB,分别表示共进行 N N N 次猜拳、小 A 出拳的周期长度,小 B 出拳的周期长度。数与数之间以一个空格分隔。

第二行包含 N A N_A NA 个整数,表示小 A 出拳的规律,第三行包含 N B N_B NB 个整数,表示小 B 出拳的规律。其中, 0 0 0 表示 剪刀 1 1 1 表示 石头 2 2 2 表示 3 3 3 表示 蜥蜴人 4 4 4 表示 斯波克。数与数之间以一个空格分隔。

输出格式

输出一行,包含两个整数,以一个空格分隔,分别表示小 A、小 B 的得分。

样例 #1

样例输入 #1

10 5 6
0 1 2 3 4
0 3 4 2 1 0

样例输出 #1

6 2

样例 #2

样例输入 #2

9 5 5
0 1 2 3 4
1 0 3 2 4

样例输出 #2

4 4

提示

对于 100 % 100\% 100% 的数据, 0 < N ≤ 200 , 0 < N A ≤ 200 , 0 < N B ≤ 200 0 < N \leq 200, 0 < N_A \leq 200, 0 < N_B \leq 200 0<N200,0<NA200,0<NB200

def judge(a,b):
    if a==b:
        return 0
    else:
        if a == 0:
            if b == 2 or b == 3:
                return 1
            else:
                return 2
            pass
        elif a == 1:
            if b == 0 or b == 3:
                return 1
            else:
                return 2
            pass
        elif a == 2:
            if b == 1 or b == 4:
                return 1
            else:
                return 2
            pass
        elif a == 3:
            if b == 2 or b == 4:
                return 1
            else:
                return 2
            pass
        elif a == 4:
            if b == 0 or b == 1:
                return 1
            else:
                return 2



if __name__=="__main__":
    n, na, nb = map(int, input().split())
    mapp_a = input()
    mapp_a = [int(item) for item in mapp_a.split()]
    mapp_b = input()
    mapp_b = [int(item) for item in mapp_b.split()]
    step_a = 0
    step_b = 0
    summ_a = 0
    summ_b = 0
    while n > 0:
        n -= 1
        key = judge(mapp_a[step_a], mapp_b[step_b])
        if key == 1:
            summ_a += 1
            pass
        if key == 2:
            summ_b += 1
            pass
        step_a += 1
        if step_a >= na:
            step_a -= na
            pass
        step_b += 1
        if step_b >= nb:
            step_b -= nb
    print(summ_a, summ_b)

不难,就是表格难看,建议把表格补齐了再看,然后细心点就行,再就是耐心点

你可能感兴趣的:(算法,python,数据结构)