2019牛客暑期多校训练营(第五场)C generator 2

思路

x0=x0x_0 = x_0x0​=x0​

x1=a∗x0∗bx_1 = a * x_0 * bx1​=a∗x0​∗b

x2=a∗x1+b=a2∗x0+a∗b+bx_2 = a * x_1 + b = a ^{2} * x_0 + a * b + bx2​=a∗x1​+b=a2∗x0​+a∗b+b

容易发现后项是一个等比数列求和

xn=anx0+b(1−an)1−ax_n = a ^ {n} x_0 + \frac {b (1 - a ^ n)} {1 - a}xn​=anx0​+1−ab(1−an)​

我们要求xn=vx_n = vxn​=v,化简

anx0+b(1−an)1−a=va ^ {n} x_0 + \frac {b (1 - a ^ n)} {1 - a} = vanx0​+1−ab(1−an)​=v

anx0(1−a)+b(1−an)=v(1−a)a ^{n} x_0(1 - a) + b (1 - a ^ n) = v(1 - a)anx0​(1−a)+b(1−an)=v(1−a)

an(x0−ax0−b)=v(1−a)−ba ^ n (x_0 - ax_0 - b) = v(1 - a) - ban(x0​−ax0​−b)=v(1−a)−b

an=v(1−a)−bx0−ax0−ba^n =\frac {v (1 - a) - b} {x_0 - a x_0 - b}an=x0​−ax0​−bv(1−a)−b​

上面式子都是modp\mod pmodp下的同余等式,为了方便写了===

看到这里就简单了,我们要求解的是nnn,显然右边这一坨都是已知的,我们假定为BBB,求解an=Ba ^ n = Ban=B,这不就是个裸题了吗。

这道题目还要稍加分类讨论一下:

  • a == 0

x0=x0,xi=b(i>=1)x_0 = x_0, x_i = b(i >= 1)x0​=x0​,xi​=b(i>=1)

  • a==1a == 1a==1

因为这种情况上面不能直接相除,所以我们需要特殊考虑ai=b+i∗aa_i = b + i * aai​=b+i∗a

也就是求解i∗a=v−bi * a = v - bi∗a=v−b,这个时候只要左右两边同时乘以aaa的逆元即可得到我们要的iii

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}ll quick_pow(ll a, ll n, ll mod) {ll ans = 1;while(n) {if(n & 1) ans = (ans * a) % mod;a = (a * a) % mod;n >>= 1;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T = read();while(T--) {ll n = read(), x0 = read(), a = read(), b = read(), p = read();ll x = 1, Unit = quick_pow(a, 1000, p);unordered_map<ll, int> MP;for(int i = 1; i <= 1000000; i++) {x = (x * Unit) % p;if(!MP.count(x)) {MP[x] = i * 1000;}}ll inv = quick_pow(((x0 - a * x0 - b) % p + p) % p, p - 2, p);int t = read();while(t--) {ll v = read();if(a == 0) {if(v % p == x0 % p) {puts("0");}else if(v % p == b % p) {puts("1");}else {puts("-1");}continue;}if(a == 1) {ll ans = (((((v - x0) % p + p) % p) * quick_pow(b, p - 2, p))) % p;if(ans < n) {printf("%lld\n", ans);}else {puts("-1");}continue;}v = (((v * (1 - a) - b) % p + p) % p * inv) % p;if(Unit == 0) {if(v == 0) {puts("0");}else {puts("-1");}continue;}x = v;int ans = p + 1;for(int i = 0; i <= 1000; i++) {if(MP.count(x)) {ans = min(ans, MP[x] - i);}x = (x * a) % p;}if(ans != p + 1 && ans < n) {printf("%d\n", ans);}else {puts("-1");}}}return 0;
}

2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)相关推荐

  1. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  2. 2019牛客暑期多校训练营(第一场)E-ABBA(dp)

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  3. 2019牛客暑期多校训练营(第一场)

    传送门 参考资料: [1]:官方题解(提取码:t050 ) [2]:标程(提取码:rvxr ) [3]:牛客题解汇总 A.Equivalent Prefixes(单调栈) •题意 定义两个数组 u,v ...

  4. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  5. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...

  6. 【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/F 来源:牛客网 Given 2N people, you need to assign each of ...

  7. 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/D 来源:牛客网 Given a vertex-weighted graph with N vertice ...

  8. 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Two arrays u and v each with m distinct elem ...

  9. 【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/H 来源:牛客网 Bobo has a set A of n integers a1,a2,-,ana1, ...

  10. 2019牛客暑期多校训练营(第九场)H Cutting Bamboos(主席树+二分)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 题目描述 There are n bamboos arranged in a line. The ...

最新文章

  1. SIT和UAT有什么区别?
  2. pc控制iphone的软件_如何通过“共享文件夹”实现iPhone与PC间文件快速传输
  3. java设计模式之UML①
  4. RAC(ReactiveCocoa)使用方法(二)
  5. 如何给MindSpore添加一个新的硬件后端?快速构建测试环境!
  6. php 解决跨域问题
  7. JAVA SSH框架的配置(myeclipse(9)+tomcat(6.0.35)+struts(2.2.3)+Spring(3.0)+Hibernate(3.0))
  8. android optionmenu 动态显示,android – 如何在onCreateOptionsMenu中动态更改菜单
  9. Q4财报净亏损8350.2万美元,Unity何时摆脱亏损“魔咒”?
  10. excel多窗口分屏并列显示
  11. 安卓手机通过termux免root安装kali
  12. frechet distance用来衡量两个曲线相似度
  13. elasticsearch ingest node
  14. 拉卡拉支付的这些创新功能,你知道吗?
  15. 服务器创建虚拟主机,服务器创建虚拟主机
  16. PCA,CCA,ICA的关系
  17. 禾穗财智 | 衣柜财商—妳的衣柜,价值千万
  18. 计算机辅助设计技术有哪些优点,计算机辅助设计技术在机械设计中的应用探讨...
  19. python爬虫之请求(url)构造 —— 寻找参数来源以及中文编码
  20. 单元测试与 Mock 方法

热门文章

  1. redis php方案,Redis三种部署方案图文详解
  2. c语言入门数组,C语言入门之数组(2)
  3. 如何把照片正面变成反面_没有锁边机如何做衣服(五种方法)
  4. 微信改成右滑删除_手机文件数据恢复,怎样恢复已过期的微信附件呢?
  5. 06-广度优先搜索:图、队列
  6. 没有标题,配得上这款“俄罗斯方块”
  7. java 线程 插件_我的第一个Chrome插件:天气预报应用
  8. python 数据驱动接口自动化框架_python接口自动化测试 - 数据驱动DDT模块的简单使用...
  9. lua传值到php,使用lua实现php的var_dump()函数功能
  10. mysql kill hup_kill -HUP pid