【考题 题解】 数字游戏

题目描述

HL 中学茶余饭后喜欢玩游戏,一个游戏规则如下:
共两人参加游戏,若第一个人当前手中的数为 w1,则下一秒他手上的数将会变成(x1w1 + y1) mod m;若第二个人当前手中的数为 w2,则下一秒他手上的数将会变为(x2w2 + y2) mod m。a mod b 表示 a 除以 b 的余数。
第 0 秒,两个人手上的数分别为 h1, h2; 请求出最快在第几秒,第一个人手上的数为 a1 并且同时第二个人手上的数为 a2。若不可能,则输出-1。
输入格式
输入包含 5*T+1 行。
第一行为一个正整数 T,表示数据组数。
对于接下来的每一组数据,第一行为一个正整数 m,第二行包括两个整数h1, a1,第三行包括两个整数 x1, y1,第四行包括两个整数 h2, a2,第五行包括两个整数 x2, y2。

输出格式

输出包含 T 行。
对于每一组数据,输出一行,一个整数,如题所述。

样例数据

input

2
5
4 2
1 1
0 1
2 3
1023
1 2
1 0
1 2
1 1

output

3
-1

数据规模与约定

对于 30%的数据:m<=1000
对于 100%的数据:T<=5, h1≠a1 且 h2≠a2,2<=m<=10^6,0<=h1,a2,x1,y1,h2,a2,x2,y2

时间限制:

1s1s

空间限制:

256MB


数字游戏具体思路

显然,如果使用暴力则不断枚举即可。但是显然会超市,我们必须要用数学方法去解决这一个问题。
至于如何数学,我们不妨举一个例子来进行理解。

例如有这么一串数字: 12343434.......... 1 , 2 , 3 , 4 , 3 , 4 , 3 , 4..........

相信你一定可以看出,出现了不断的循环。这是为什么?因为每做一次运算都必须要对一个数 m m 取模,并且当再次出现和原来相同的数字的时候便会有重复的个数,因此必然会出现循环。而且如果去模拟,循环会消耗大量的时间复杂度,我们同样可以在时间上寻求优化的办法。

我们知道,出现重复,会有三种情况
两者都在两者进入循环之前提前遇到

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值