本文链接http://www.cnblogs.com/Ash-ly/p/5494618.html

题意:

  度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到:

请帮助度熊计算大字符串中任意一段的哈希值是多少。多组测试数据,每组测试数据第一行是一个正整数N,代表询问的次数,第二行一个字符串,代表题目中的大字符串,接下来N行,每行包含两个正整数a和b,代表询问的起始位置以及终止位置。

思路:
  首先利用一个前缀数组A[i]表示从第一个字符到第i个字符的字符串的H(s)值,如果要求从a到b,那么很显然是A[b] / A[a-1].又因为A数组是对9973取模的,所以相当于已知A[b] % P, A[a - 1] % P,求A[b] / A[a - 1].
已知 a % mod, b % mod, 求(a / b) % mod,用Inv(p)代表p的逆
(a / b) % mod = (a *  Inv(b)) % mod = (a % mod * Inv(b) % mod) % mod;
然后求 1 到 mod - 1 对 mod 逆元记为Inv(b % mod)
所以 (a / b) % mod = (a % mod * Inv(b % mod)) % mod;
求 1 到 mod - 1 对 mod 逆元的代码:
 const int mod = ;
LL Inverse[mod + ];
Inverse[] = , Inverse[] = ;
for(int i = ; i < mod; i++)
Inverse[i] = ( - ( mod / i ) * Inverse[ mod % i ] ) % mod + mod;

这道题代码:

 const int maxN =  + ;
const int p = ;
LL ni[p];
char str[maxN];
LL a[maxN]; int main(){
//freopen("input.txt", "r", stdin);
ni[] = ;
ni[] = ;
for(int i = ; i < p; i++)
ni[i] = (-(p/i) * ni[p%i]) % p + p;
int n;
while(~scanf("%d", &n))
{
scanf("%s", str);
int len = strlen(str);
a[] = ;
for(int i = ; i <= len; i++)
a[i] = a[i - ] * (str[i - ] - ) % p;
while(n--){
int s, m;
scanf("%d%d", &s, &m);
printf("%I64d\n", a[m] * ni[a[s - ]] % p);
}
}
return ;
}

百度之星资格赛 2016 Problem 1001的更多相关文章

  1. 百度之星资格赛 2016 Problem 1004

    本文链接:http://www.cnblogs.com/Ash-ly/p/5494630.html 题意: 熊所居住的 D 国,是一个完全尊重人权的国度.以至于这个国家的所有人命名自己的名字都非常奇怪 ...

  2. 百度之星资格赛 2016 Problem 1002

    本文链接:http://www.cnblogs.com/Ash-ly/p/5494623.html 题意: 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个 ...

  3. HDU 5688:2016"百度之星" - 资格赛 Problem D

    原文链接:https://www.dreamwings.cn/hdu5688/2650.html Problem D Time Limit: 2000/1000 MS (Java/Others)    ...

  4. HDU 5686:2016"百度之星" - 资格赛 Problem B

    原文链接:https://www.dreamwings.cn/hdu5686/2645.html Problem B Time Limit: 2000/1000 MS (Java/Others)    ...

  5. HDU 5685:2016"百度之星" - 资格赛 Problem A

    原文链接:https://www.dreamwings.cn/hdu5685/2637.html Problem A Time Limit: 2000/1000 MS (Java/Others)    ...

  6. 2016百度之星 资格赛ABCDE

    看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. 模拟 2015百度之星资格赛 1003 IP聚合

    题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...

  9. 模拟 百度之星资格赛 1003 IP聚合

    题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...

随机推荐

  1. [SCOI2010]序列操作 线段树

    ---题面--- 题解: 在考场上打的这道题,出人意料的很快就打完了?! 直接用线段树,维护几个东西: 1,lazy标记 : 表示区间赋值 2,mark标记:表示区间翻转 3,l1:前缀最长连续的1的 ...

  2. jsp电子商务 购物车实现之三 购物车

    CartServlet参考代码 : public void doPost(HttpServletRequest req, HttpServletResponse resp) throws Servle ...

  3. 【BZOJ 2460 元素】

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1555  Solved: 809[Submit][Status][Discuss] Descripti ...

  4. jQuery.getJSON跨域访问的正确使用方式(史上最傻瓜式解释)

    最近花了2天时间完整的看了一遍 jQuery 的API,其中 $.getJSON(url[, data][, callback]) 方法的跨域访问解释真心看的一头雾水,大家可以从这里感受一下: htt ...

  5. vim插件修改背景颜色和代码颜色

    ls /usr/share/vim/vim74/colorsblue.vim default.vim desert.vim evening.vim morning.vim pablo.vim READ ...

  6. Java super和this

    this this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this相当于是指向当前对象本 ...

  7. hihoCoder 1527 快速乘法

    #include<bits/stdc++.h> using namespace std; ; char a[N]; int main() { scanf(); ); ,r = n; ') ...

  8. RPC-Thrift(四)

    Client Thrift客户端有两种:同步客户端和异步客户端. 同步客户端 同步客户端比较简单,以RPC-Thrift(一)中的的例子为基础进行研究源码,先看一下类图. TServiceClient ...

  9. 【BZOJ2663】灵魂宝石 [二分]

    灵魂宝石 Time Limit: 5 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description “作为你们本体的灵魂,为了能够更好的 ...

  10. bzoj3127/3697 [Usaco2013 Open]Yin and Yang

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3127 http://www.lydsy.com/JudgeOnline/problem.ph ...