BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】
题目
输入格式
输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数。
接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据。保证X1和t都是合法的页码。
注意:P一定为质数
输出格式
共T行,每行一个整数表示他最早读到第t页是哪一天。如果他永远不会读到第t页,输出-1。
输入样例
3
7 1 1 3 3
7 2 2 2 0
7 2 2 2 1
输出样例
1
3
-1
提示
0<=a<=P-1,0<=b<=P-1,2<=P<=10^9
题解
运用数列的知识可以将式子化简为一个等比数列
然后就可以用BSGS求解
但是要分很多特殊情况讨论 = =
例如\(a = 0,a = 1,X1 = t\)之类的
还有,,
BSGS时,开根要向上取整,保证查找真的完全了
数学真差
#include<iostream>
#include<cstdio>
#include<cmath>
#include<map>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}return out * flag;
}
LL P;
map<LL,LL> mp;
LL qpow(LL a,LL b){LL ans = 1;for (; b; b >>= 1,a = a * a % P)if (b & 1) ans = ans * a % P;return ans % P;
}
LL inv(LL a){return qpow(a,P - 2);
}
void solve1(LL A,LL B,LL X,LL T){LL ans = ((T - X) % P * inv(B) % P + P) % P;printf("%lld\n",ans + 1);
}
LL BSGS(LL a,LL b){mp.clear();if (a % P == 0) return -2;LL m = (LL)ceil(sqrt(P)),ans;for (int i = 0; i <= m; i++){if (i == 0){ans = b % P;mp[ans] = i;}else {ans = ans * a % P;mp[ans] = i;}}LL t = qpow(a,m); ans = t;for (int i = 1; i <= m; i++){if (i != 1) ans = ans * t % P;if (mp.count(ans)){ans = ((i * m - mp[ans]) % P + P) % P;return ans;}}return -2;
}
void solve2(LL A,LL B,LL X,LL T){LL tmp = B * inv(A - 1) % P;LL a = A,b = (T + tmp) % P * inv(X + tmp) % P;printf("%lld\n",BSGS(a,b) + 1);
}
int main(){int T = read(),a,b,X1,t;while (T--){P = read(),a = read(),b = read(),X1 = read(),t = read();if (X1 == t) puts("1");else if (a == 0){if (t == b) puts("2");else puts("-1");}else if (a == 1){if (b == 0) puts("-1");else solve1(a,b,X1,t);}else solve2(a,b,X1,t);}return 0;
}
转载于:https://www.cnblogs.com/Mychael/p/8601761.html
BZOJ3122 [Sdoi2013]随机数生成器 【BSGS】相关推荐
- bzoj3122 [SDOI2013]随机数生成器
bzoj3122 [SDOI2013]随机数生成器 给定一个递推式, \(X_i=(aX_{i-1}+b)\mod P\) 求满足 \(X_k=t\) 的最小整数解,无解输出 \(-1\) \(0\l ...
- bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)
Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. 注意 ...
- bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ...
- luogu P3306 [SDOI2013] 随机数生成器(BSGS,数列求通项,毒瘤特判)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 发个水题的 题解证明我还在() luogu P3306 [SDOI2013] 随机数生成器 Webli ...
- 【bzoj3122】 Sdoi2013—随机数生成器
http://www.lydsy.com/JudgeOnline/problem.php?id=3122 (题目链接) 题意 对于一个数列${X_i}$,其递推式为:${X_{i+1}=(a*X_i+ ...
- 牛客——[SDOI2013]随机数生成器(推公式+BSGS)
链接:https://ac.nowcoder.com/acm/problem/20362 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 数论练习二之BSGS算法——随机数生成器,Matrix,Lunar New Year and a Recursive Sequence,Fermat‘s Last Theorem
[SDOI2013] 随机数生成器 description solution 肯定是非常想找一个通项公式来表示第nnn个数的 依据形式,考虑化成等比数列 xi+1+k=a(xi+k)=a⋅xi+b+t ...
- Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom 文中的 Random即:java.util.Random, ThreadLocalRandom 即 ...
- 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器 本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...
- P5147 随机数生成器 [数列]
P5147 随机数生成器 数学老师看不懂系列 看题目这一片代码就很晕: int work(int x) {if(x==1)return 0;else return work(rand(1,x))+1; ...
最新文章
- MyAdapter Andriod
- 超图桌面版根据现有数据源制作一幅地图简单操作
- linux raid更换硬盘,linux系统raid1更换故障硬盘处理过程
- Linux嵌入式 -- Bootloader , Uboot
- go语言如何连接数据库
- 自动采集壁纸的微信小程序
- 华为方舟编译器开源!前华为人重磅解读!
- 怎么在Telegram电报纸飞机中搜索频道群组机器人教程。
- musictools(无损付费音乐免费下载神器) 最新版 v3.7.0
- Ubuntu18.04版本安装ssh及连接ssh的常见问题
- 开源一款资源分享与下载工具 —— 电驴(eMule)
- centos7.6安装maven
- 大数据分析与应用(中级) 数据挖掘概念及流程
- 我写过的软件之TSE-工作流程和实现
- 4.(css3布局)使用flex布局携程网首页案例
- 【收藏】一些实用的分割线
- 判别分析 ( distinguish analysis)(四):应用举例
- 文件传输工具Xftp5安装图解
- matlab计算不同时间步长,Matlab ODE求解器中的时间步长计算
- 2022安徽安全员C考试单选题库预测分享
热门文章
- MAC编译OpenJDK8:clang: error: include path for libstdc++ headers not found(独家解决办法)
- 终于把Android Studio用起来了,及体验
- 假期最后一天,出差赶到天津
- C向Python传递数组参数时,调用函数后才能销毁
- 商品包含资源和劳动两部分内容
- Verify the value of the CODE_SIGN_ENTITLEMENTS的解决办法
- conda安装cv2_『开发技术』Windows极简安装使用face_recognition实现人脸识别
- tcp 裸流 发送 html,ffmpeg 命令学习
- html5 video mute按钮,How to mute an html5 video player
- 中国计算机类研究生学校排名,2018考研:计算机专业全球院校排名公布,上海交通大学竟排第一?...