hdu 5685 Problem A
2016-05-17 18:53
585 查看
[align=left]Problem Description[/align]
[align=left]Input[/align]
[align=left]Output[/align]
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
[align=left]Source[/align]
2016"百度之星" - 资格赛(Astar Round1)
[align=left]区间求积的问题,直接算出前缀积,然后用逆元即可[/align]
[align=left]AC代码:[/align]
度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到: H(s)=∏i≤len(s)i=1(Si−28) (mod 9973) Si代表 S[i] 字符的 ASCII 码。 请帮助度熊计算大字符串中任意一段的哈希值是多少。
[align=left]Input[/align]
多组测试数据,每组测试数据第一行是一个正整数N,代表询问的次数,第二行一个字符串,代表题目中的大字符串,接下来N行,每行包含两个正整数a和b,代表询问的起始位置以及终止位置。 1≤N≤1,000 1≤len(string)≤100,000 1≤a,b≤len(string)
[align=left]Output[/align]
对于每一个询问,输出一个整数值,代表大字符串从 a 位到 b 位的子串的哈希值。
[align=left]Sample Input[/align]
2 ACMlove2015 1 11 8 10 1 testMessage 1 1
[align=left]Sample Output[/align]
6891 9240 88
[align=left]Source[/align]
2016"百度之星" - 资格赛(Astar Round1)
[align=left]区间求积的问题,直接算出前缀积,然后用逆元即可[/align]
[align=left]AC代码:[/align]
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <set> using namespace std; #define N 100006 #define MOD 9973 int n; int inv ; int f ; char s ; int main() { inv[1]=1; for(int i=2;i<MOD;i++){ inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD; } while(scanf("%d",&n)==1){ scanf("%s",s+1); f[0]=1; for(int i=1;s[i];i++){ f[i]=f[i-1]*(s[i]-28)%MOD; } for(int i=0;i<n;i++){ int l,r; scanf("%d%d",&l,&r); printf("%d\n",f[r]*inv[f[l-1]]%MOD); } } return 0; }
相关文章推荐
- iPhone实现自定义多选列表
- python 二维码实现
- iPhone实现自定义多选列表
- 数据结构总结
- Android App中用Handler实现ViewPager页面的自动切换
- 无序列表<ul>与列表项目<li>
- 关于spring mybatis 事务
- Shader Forge初级篇|RGB通道的UV混合效果 一
- 总结Margin重叠现象
- mysq集群原理之Galera replication
- MIME
- hdu 1214 圆桌会议
- UML图
- python 正则
- 为什么我从 Python 转战到 Node.js
- android http——网络请求二次封装的框架设计
- Swift学习笔记(3)iOS 9 中的网络请求
- myEclipse出现:"Building workspace" has encountered a problem
- <div>
- 单例模式