#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. OpenJDK换为JDK(CentOS)

    说明:应该来说没必要非把OpenJDK卸载掉,只要让$PATH中我们安装的jdk的目录较OpenJDK所在的/usr/bin先出现就好了:简言之跳过下边的第一步直接从第二步开始更科学一些. 1.卸载O ...

  2. QPainter绘制特殊线条

    参考资料: https://www.cnblogs.com/Jace-Lee/p/5946342.html 效果图: 代码: void WgtText::paintEvent(QPaintEvent ...

  3. weex npm 报错 cb() never called!

    安装环境:windows7 使用npm 安装 出现错误后网上查找并没有解决,在准备放弃的时候试着用cnpm安装了一下,结果安装成功了,感觉应该网络问题,不知原因但完美解决

  4. 整数中1出现的次数(1~n)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  5. 银联接口C#

    银联支付: ChinaPay的会员商户接入支付平台,以方便商户开展网上支付交易. 持卡人从商户网站中生成订单信息,通过公共支付交易平台中的支付网关子系统进行支付的过程,其交易流程包括订单确认.支付处理 ...

  6. 据说excel流是这么做,上次我分享的是csv格式。这个是excel格式。

    import xlwt import StringIO import web urls = ( '/rim_request','rim_request', '/rim_export','rim_exp ...

  7. 《Python》 计算机基础

    一.计算机基础: cpu:中央处理器,相当于人的大脑,运算中心,控制中心. 内存:暂时存储数据,与CPU交互. 优点:内存读取速度快. 缺点:容量小,造价高,断电即消失. 硬盘:长期存储数据. 优点: ...

  8. pymongo 对mongoDB的操作

    #文档地址 http://api.mongodb.com/python/current/api/pymongo/collection.html collection级别的操作: find_and _m ...

  9. jdk8-全新时间和日期api

    1.jdk8日期和时间api是线程安全的 1.java.time  处理日期时间 2.java.time.temporal: 时间校正器.获取每个月第一天,周几等等 3.java.time.forma ...

  10. 打开和写入word文档

    一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...