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,输;
问题
- 应该用什么方法快速且直观表示胜负矩阵图?
------->由矩阵联想到二维数组!再用二维数组打表就可以了!
代码如下
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];
}
- 人物周期性出场规律如何表示?
------>先将出场的人物与次序用数组保存起来,再在每轮比赛的时候查询 - 怎么表示每个轮次出场的是队伍的第几个人?
------> 联想学习密码加密时的代码,可以用i%n的方法来表示循环(i表示当前轮次,n表示队伍长度)
char x;cin >> x;
x = (x-'a'+n)%26 + 'a';
总结
- 一个确定的矩阵可以用二维数组来打表(如 社团大对决的胜负图)
- 典型问题(n个人按照规律,轮m次 ):先用数组储存一个周期的出场顺序,再用%来表示每轮次轮到周期中的第几个人。{ 数组储存和轮次的for循环均[0,n) }