2163(经典问题:n个人按照周期性规律,轮m次;用二维数组来打表)

Description

剪刀石头布是一种常见的对决游戏zyx作为剪刀石头布爱好者经过研究发明了一种适合在社团玩的对决游戏
分别是社团的人物,lxc(社团的女主角),zyh(社团的男主角), ypz(企图迷晕lxc的前辈), wyz(lxc的守护者), zyx(隐藏在社团的研究员);
这五种人物对战的胜负关系如表一所示,表中列出的是小明和小红的游戏结果
现在,小明和小红尝试玩这种对决游戏。已知他们的人物出场顺序都是有周期性规律的,但周期长度不一定相等。例如:如果小明以“lxc-zyh-wyz-lxc-zyx-ypz”长度为 6的周期出场,
那么他的人物出场序列就是“lxc-zyh-wyz-lxc-zyx-ypz-lxc-zyh-wyz-lxc-zyx-ypz-…”,而如果小红以“zyx-zyh-wyz-lxc-ypz”长度为5的周期出场,
那么他的人物出场的序列就是“zyx-zyh-wyz-lxc-ypz-zyx-zyh-wyz-lxc-ypz-…”
已知小明和小红一共进行N次对决。每一次赢的人得 1分,输的得 0分;平局两人都得 0分。现请你统计N次对决结束之后两人的得分。

Input

第一行包含三个整数:N, Na, Nb,分别表示进行了n次对决,小明人物出场顺序的周期长度,小红人物出场顺序的周期长度。数与数之间以一个空格分隔。第二行包含Na个整数,表示小明人物出场的规律,第三行包含Nb个整数,表示小红人物出场的规律。其中, 0表示“lxc”,1表示“zyh”,2表示“ypz”,3表示“wyz”,4表示“zyx”。数与数之间以空格分隔。

Output

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

Sample Input
8 5 6
0 3 2 1 4  
2 1 3 4 0 3

Sample Output

5 3

HINT
对于100%的数据, 0 < N <= 200, 0 < Na <= 200, 0 < Nb <= 200

对于对决的胜负关系,根据行比列可看出,以第二行为例,lxc对决lxc。平;lxc对决zyh,输;lxc对决ypz,赢;lxc对决wyz,赢;lxc对决zyx,输;
在这里插入图片描述

问题

  1. 应该用什么方法快速且直观表示胜负矩阵图?
    ------->由矩阵联想到二维数组!再用二维数组打表就可以了!
    代码如下
int f(int a,int b)
{
    int s[5][5]={
    {0,-1,1,1,-1},
    {1,0,-1,1,-1},
    {-1,1,0,-1,1},
    {-1,-1,1,0,1},
    {1,1,-1,-1,0},
};
return s[a][b];
}
  1. 人物周期性出场规律如何表示?
    ------>先将出场的人物与次序用数组保存起来,再在每轮比赛的时候查询
  2. 怎么表示每个轮次出场的是队伍的第几个人?
    ------> 联想学习密码加密时的代码,可以用i%n的方法来表示循环(i表示当前轮次,n表示队伍长度)
    char x;cin >> x;
    x = (x-'a'+n)%26 + 'a';

总结

  1. 一个确定的矩阵可以用二维数组来打表(如 社团大对决的胜负图)
  2. 典型问题(n个人按照规律,轮m次 ):先用数组储存一个周期的出场顺序,再用%来表示每轮次轮到周期中的第几个人。{ 数组储存和轮次的for循环均[0,n) }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值