题目描述
石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 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;
}