#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long LL;
const LL q=;
const int a=;
const int mod=;
LL hs[mod],id[mod],head[mod],_next[mod];
int top;
inline void _inset (LL x, LL y) {
hs[top]=y; id[top]=x;// hs 是健值 id是映射的数
                 // 所有的值按序号保存 但要根据健值记录它们存放的位置
LL k=y%mod;
_next[top]=head[k];// 每个链表有一个虚拟头节点 用哈希函数确定应该插入哪个头节点
           // next 表示下一个元素存放的节点 用来连接链表
head[k]=top++;
}
LL _find (LL x) {
LL k=x%mod;
for (LL i=head[k];i!=-;i=_next[i])
if (hs[i]==x) return id[i];
return -;
}
LL bsgs (LL y) {
top=;
memset (head,-,sizeof(head));
LL t=sqrt (q)+;
LL tmp=;
for (int i=;i<t;i++) {
_inset (i,tmp*y%q);
tmp=tmp*a%q;
}
LL ans=;
for (int i=;i<=t;i++) {
ans=ans*tmp%q;
LL m=_find(ans);
if (m>=) return i*t-m;
}
return -;
}
LL q_pow (LL x,LL k) {
LL ans=;
while (k) {
if (k&) ans=ans*x%q;
k=k>>; x=x*x%q;
}
return ans;
}
int main ()
{
LL y1,y2;
while (~scanf ("%lld %lld",&y1,&y2)) {
LL x1=bsgs (y1);
LL x2=bsgs (y2);
if (x1==-||x2==-) printf ("No Solution\n");
else printf ("%lld\n",q_pow (y1,x2) );
}
return ;
}

xdoj1194----(bsgs-用数组实现链表 真的是好啊)的更多相关文章

  1. 数组和链表--Java学习笔记(一)

    版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 我是一个全职妈妈,两年前在上海一家人力资源 ...

  2. UVA11988-Broken Keyboard(数组模拟链表)

    Problem UVA11988-Broken Keyboard Accept: 5642  Submit: 34937 Time Limit: 1000 mSec Problem Descripti ...

  3. PHP内核探索:数组与链表

    在C语言中,我们可以自定义各种各样的数据结构,用来把很多数据保存在一个变量里面,但是每种数据结构都有自己的优缺点,PHP内核规模如此庞大,是否已经找到了一些非常棒的解决方法呢? 我们在选择各种数据结构 ...

  4. Java基础知识强化之集合框架笔记21:数据结构之 数组 和 链表

    1. 数组 2. 链表

  5. 通过数组初始化链表的两种方法:指向指针的引用node *&tail和指向指针的指针(二维指针)node **tail

    面试高频题:单链表的逆置操作/链表逆序相关文章 点击打开 void init_node(node *tail,char *init_array) 这样声明函数是不正确的,函数的原意是通过数组初始化链表 ...

  6. 数组、链表、Hash(转)

    在程序中,存放指定的数据最常用的数据结构有两种:数组和链表. 数组和链表的区别: 1.数组是将元素在内存中连续存放. 链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起. 2.数组 ...

  7. 面试之路(8)-BAT面试题之数组和链表的区别

    两种数据结构都是线性表,在排序和查找等算法中都有广泛的应用 各自的特点: 数组: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个 ...

  8. 源码:Java集合源码之:数组与链表(一)

    数组和链表是数据结构中最基本的部分. 数组 在java中,数组定义为一种基本类型,其可以通过下标获取到对应位置的数据.那么这种结构的数据,在内存中是怎么存放的呢? 数组在内存中是一段连续的存储单元,每 ...

  9. C - Boxes in a Line 数组模拟链表

    You have n boxes in a line on the table numbered 1 . . . n from left to right. Your task is to simul ...

随机推荐

  1. python vue 项目

    http://www.jianshu.com/p/fe74907e16b9 mac 电脑,亲测可以,可以看下开源的写法及思路

  2. Unity中UI界面颤抖解决方法

    将Render Mode中属性改为Screen Space - Camera 摄像机挂在Canvas属性下会出现UI界面颤抖的效果. UI界面颤抖解决方式:将Render Mode中属性改为Scree ...

  3. CSS技巧-文字分散对齐的方法

    下面的代码可以在IE中实现文字分散对齐: <table width="300" align="center">    <tr>      ...

  4. jdk重装后com.sun.tools.javac.Main is not on the classpath的问题 .

    在重装了JDk之后,在编译工程的时候出现如下错误: com.sun.tools.javac.Main is not on the classpath.Perhaps JAVA_HOME does no ...

  5. MySQL 数据库备份策略:全备与增量备份

    一.备份策略1.周日全备份,周一至周六增量备份2.全备份目录/u03/backup/innobackup/full_backup3.增量备份目录/u03/backup/innobackup/incre ...

  6. day17 面向对象-成员

    今日主要学习了: 1 .成员 2. 变量 3. 方法 4.属性 5.私有 1. 成员 在类中你能写的所有内容都是成员 2 .变量 1) 实例变量: 昨天写的就是实例变量 ,由对象去访问的变量 . cl ...

  7. DFS----Lake Counting (poj 2386)

    Lake Counting(POJ No.2386) Description Due to recent rains, water has pooled in various places in Fa ...

  8. VSTO:使用C#开发Excel、Word【5】

    <Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...

  9. yaw roll pitch matrix

    http://planning.cs.uiuc.edu/node102.html http://planning.cs.uiuc.edu/node103.html

  10. 5.6 C++重载下标操作符

    参考:http://www.weixueyuan.net/view/6384.html 总结: 下标操作符是必须要以类的成员函数的形式进行重载的.其在类中的声明格式如下:    返回类型 & ...