生活大爆炸版石头剪刀布 模拟算法

文章讲述了《生活大爆炸》中出现的一种升级版石头剪刀布游戏,加入了《星际迷航》中的手势,分析了玩家小A和小B具有周期性出拳规律下的游戏策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

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

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

斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。

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

甲\乙剪刀石头蜥蜴人斯波克
剪刀
石头-
--
蜥蜴人---
斯波克----

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

#include <bits/stdc++.h>
#define endl '\n'
#define buff ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef vector<ll> vll;
typedef vector<pair<ll,ll>> vpll;
const ll MAX_INT=0x3f3f3f3f;
const ll MAX_LL=0x3f3f3f3f3f3f3f3f;
const ll CF=2e5+9;
const ll mod=1e9+7;
int ans[][7]={{0,0,1,1,0},
              {1,0,0,1,0},
              {0,1,0,0,1},
              {0,0,1,0,1},
              {1,1,0,0,0}};
int ansa,ansb,nowa,nowb,n,na,nb,a[207],b[207];
void solve()
{
    cin >>n>>na>>nb;
    for (int i=0;i<na;i++) cin >>a[i];
    for (int i=0;i<nb;i++) cin >>b[i];
    for (int i=1;i<=n;i++)
    {
        ansa+=ans[a[nowa]][b[nowb]];
        ansb+=ans[b[nowb]][a[nowa]];
        nowa=(nowa+1)%na;
        nowb=(nowb+1)%nb;
    }
    cout <<ansa<<' '<<ansb;
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
    int T=1;
    while (T--)
    {
        solve();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值