洛谷P3306 随机数生成器
题意:给你一个数列,a1 = x,ai = (A * ai-1 + B) % P,求第一个是t的是哪一项,或者永远不会有t。
解:循环节不会超过P。我们使用BSGS的思想,预处理从t开始跳√P步的,插入Hash表内。
然后每次把a1跳√P步,来看是否在Hash表中存在。
这样发现我们有40,WA了60分。为什么呢?考虑是否存在两个数x和y,它们跳一次之后一样了。发现这种情况只会出现在A = 0的时候,于是特判掉A = 0。可获得100分。
#include <bits/stdc++.h>
const int N = ;
int MO, A, B, op, aim;
inline int qpow(int a, int b) {
int ans = ;
while(b) {
if(b & ) {
ans = 1ll * ans * a % MO;
}
a = 1ll * a * a % MO;
b = b >> ;
}
return ans;
}
namespace Hash {
struct Node {
int nex, v, id;
}node[N]; int tp;
const int mod = ;
int e[mod];
inline void clear() {
tp = ;
memset(e, , sizeof(e));
return;
}
inline void insert(int v, int id) {
int x = v % mod;
for(int i = e[x]; i; i = node[i].nex) {
if(node[i].v == v) {
node[i].id = id;
return;
}
}
node[++tp].nex = e[x];
node[tp].v = v;
node[tp].id = id;
e[x] = tp;
return;
}
inline int find(int v) {
int x = v % mod;
for(int i = e[x]; i; i = node[i].nex) {
if(node[i].v == v) {
return node[i].id;
}
}
return -;
}
}
inline void solve() {
Hash::clear();
scanf("%d%d%d%d%d", &MO, &A, &B, &op, &aim);
if(op == aim) {
printf("%d\n", );
return;
}
if(A == ) {
if(B == aim) {
printf("2\n");
}
else {
printf("-1\n");
}
return;
}
int T = sqrt((double)MO);
for(int i = ; i < T; i++) {
Hash::insert(aim, i);
//printf("Hash insert %d %d \n", aim, i);
aim = (1ll * A * aim % MO + B) % MO;
}
int c = qpow(A, T), d;
if(A == ) {
d = 1ll * B * T % MO;
}
else {
d = (1ll * (c - ) * qpow(A - , MO - ) % MO * B % MO + MO) % MO;
}
//printf("c = %d d = %d \n", c, d);
for(int i = ; (i - ) * T < MO; i++) {
op = (1ll * op * c + d) % MO;
int t = Hash::find(op);
//printf("op = %d t = %d \n", op, t);
if(t != -) {
printf("%d\n", i * T - t + );
return;
}
}
printf("-1\n");
return;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
solve();
}
return ;
}
AC代码
洛谷P3306 随机数生成器的更多相关文章
- 洛谷P3600 随机数生成器(期望dp 组合数)
题意 题目链接 Sol 一条重要的性质:如果某个区间覆盖了另一个区间,那么该区间是没有用的(不会对最大值做出贡献) 首先不难想到枚举最终的答案\(x\).这时我们需要计算的是最大值恰好为\(x\)的概 ...
- [洛谷P5147]随机数生成器
题目大意:$$f_n=\begin{cases}\frac{\sum\limits_{i=1}^nf_i}n+1&(n>1)\\0&(n=1)\end{cases}$$求$f_n ...
- 洛谷P3600随机数生成器——期望+DP
原题链接 写到一半发现写不下去了... 所以orz xyz32768,您去看这篇题解吧,思路很清晰,我之前写的胡言乱语与之差距不啻天渊 #include <algorithm> #incl ...
- 洛谷 P3600 - 随机数生成器(期望 dp)
题面传送门 我竟然独立搞出了这道黑题!incredible! u1s1 这题是我做题时间跨度最大的题之一-- 首先讲下我四个月前想出来的 \(n^2\log n\) 的做法吧. 记 \(f(a)=\m ...
- 【洛谷 P3306】[SDOI2013]随机数生成器 (BSGS)
题目链接 怎么这么多随机数生成器 题意见原题. 很容易想到\(BSGS\)算法,但是递推式是\(X_{i+1}=(aX_i+b)\mod p\),这显然不是一个等比数列. 但是可以用矩阵乘法来求出第\ ...
- 洛谷P3306 [SDOI2013]随机数生成器(BSGS)
传送门 感觉我BSGS都白学了……数学渣渣好像没有一道数学题能自己想出来…… 要求$X_{i+1}=aX_i+b\ (mod \ \ p)$ 左右同时加上$\frac{b}{a-1}$,把它变成等比数 ...
- 洛谷 [P4035] 球形空间生成器
高斯消元 注意浮点误差,判断一个浮点数是否为 0 的时候,看他的绝对值与 \(10^{-8}\)的关系 #include <iostream> #include <algorithm ...
- 洛咕 P3306 [SDOI2013]随机数生成器
洛咕 P3306 [SDOI2013]随机数生成器 大力推式子??? \(X_{i}=\underbrace{a(a(\cdots(a(a}_{i-1个a}X_1+b)))\cdots)\) \(=b ...
- P3306 [SDOI2013]随机数生成器(bzoj3122)
洛谷 bzoj 特判+多测真恶心 . \(0\le a\le P−1,0\le b\le P−1,2\le P\le 10^9\) Sample Input 3 7 1 1 3 3 7 2 2 2 0 ...
随机推荐
- amazeUI tab禁止左右滑动(触控操作)
参考:http://amazeui.clouddeep.cn/javascript/tabs/ 效果: html: <!DOCTYPE html> <html> <hea ...
- 关于java 线程的停止同时用 interrupt 和 join 的作用
/** * @FileName: ThreadTest.java * @Description: * @Author : xingchong * @CreateTime: Sep 22, 2018 1 ...
- [USACO2005 nov] Grazing on the Run【区间Dp】
Online Judge:bzoj1742,bzoj1694 Label:区间Dp 题目描述 John养了一只叫Joseph的奶牛.一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草.我 ...
- DOM节点克隆
var newDiv = red.cloneNode();document.body.appendChild(newDiv);注意:1.默认只克隆元素本身:设置参数为true,进行深度克隆,可以克隆元 ...
- 开机自动调用.bat文件且浏览器全屏展示
1,将 .bat文件放入到以下路径中 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 或 C:\Users\Administr ...
- SG函数模板(洛谷2197nim游戏
#include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...
- 中国剩余定理模数互质的情况模板(poj1006
http://poj.org/problem?id=1006 #include <iostream> #include <cstdio> #include <queue& ...
- bzoj1913: [Apio2010]signaling 信号覆盖
传送门 题解传送门 //Achen #include<algorithm> #include<iostream> #include<cstring> #includ ...
- iOS之String动态书写
/** String动画书写出来 @param string 要写的字 @param view 父视图 @param ui_font 字体大小 @param color 字体颜色 */ - (void ...
- SPSS科普 | 统计描述
SPSS科普 | 统计描述 统计描述的目的就是了解数据的基本特征和分布规律,为进一步合理地选择统计方法提供依据.常用的有Frequencies.Descriptives 和Explore过程. 一.F ...