hdu5685
来源:互联网 发布:杀破狼 js微盘下载 编辑:程序博客网 时间:2024/06/05 15:54
A - Problem A
度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到:
H(s)=∏i≤len(s)i=1(Si−28) (mod 9973) H(s)=∏i=1i≤len(s)(Si−28) (mod 9973)
Si Si代表 S[i] 字符的 ASCII 码。
请帮助度熊计算大字符串中任意一段的哈希值是多少。 Input 多组测试数据,每组测试数据第一行是一个正整数N N,代表询问的次数,第二行一个字符串,代表题目中的大字符串,接下来N N行,每行包含两个正整数a a和b b,代表询问的起始位置以及终止位置。
1≤N≤1,000 1≤N≤1,000
1≤len(string)≤100,000 1≤len(string)≤100,000
1≤a,b≤len(string) 1≤a,b≤len(string)
Output 对于每一个询问,输出一个整数值,代表大字符串从 a a 位到 b b 位的子串的哈希值。 Sample Input 2ACMlove20151 118 101testMessage1 1
Sample Output 6891924088
AC代码:
#include<stdio.h>#include<cstdio>#include<string.h>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<cmath>#include<set>#include<map>#include<vector>using namespace std;const int N=1e5+10;const int INF=0x3f3f3f3f;typedef long long ll;#define lson l,mid,ro<<1#define rson mid+1,r,ro<<1|1const int mod=9973;int tr[N*4];char s[N];void Pushup(int ro){ tr[ro]=tr[ro<<1]*tr[ro<<1|1]%mod;}void build(int l,int r,int ro){ if(l==r) { tr[ro]=s[l-1]-28; return ; } int mid=(l+r)/2; build(lson); build(rson); Pushup(ro);}int query(int a,int b,int l,int r,int ro){ if(a<=l&&b>=r) return tr[ro]; int mid=(l+r)/2; if(b<=mid) return query(a,b,lson); else if(a>mid) return query(a,b,rson); else return query(a,mid,lson)*query(mid+1,b,rson)%mod;}int main(){ int m; while(scanf("%d",&m)!=EOF) { scanf("%s",s); int n=strlen(s); build(1,n,1); while(m--) { int a,b; scanf("%d%d",&a,&b); printf("%d\n",query(a,b,1,n,1)); } } return 0;}
度熊手上有一本字典存储了大量的单词,有一次,他把所有单词组成了一个很长很长的字符串。现在麻烦来了,他忘记了原来的字符串都是什么,神奇的是他竟然记得原来那些字符串的哈希值。一个字符串的哈希值,由以下公式计算得到:
H(s)=∏i≤len(s)i=1(Si−28) (mod 9973) H(s)=∏i=1i≤len(s)(Si−28) (mod 9973)
Si Si代表 S[i] 字符的 ASCII 码。
请帮助度熊计算大字符串中任意一段的哈希值是多少。
请帮助度熊计算大字符串中任意一段的哈希值是多少。
2ACMlove20151 118 101testMessage1 1
6891924088
AC代码:
#include<stdio.h>#include<cstdio>#include<string.h>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#include<stack>#include<cmath>#include<set>#include<map>#include<vector>using namespace std;const int N=1e5+10;const int INF=0x3f3f3f3f;typedef long long ll;#define lson l,mid,ro<<1#define rson mid+1,r,ro<<1|1const int mod=9973;int tr[N*4];char s[N];void Pushup(int ro){ tr[ro]=tr[ro<<1]*tr[ro<<1|1]%mod;}void build(int l,int r,int ro){ if(l==r) { tr[ro]=s[l-1]-28; return ; } int mid=(l+r)/2; build(lson); build(rson); Pushup(ro);}int query(int a,int b,int l,int r,int ro){ if(a<=l&&b>=r) return tr[ro]; int mid=(l+r)/2; if(b<=mid) return query(a,b,lson); else if(a>mid) return query(a,b,rson); else return query(a,mid,lson)*query(mid+1,b,rson)%mod;}int main(){ int m; while(scanf("%d",&m)!=EOF) { scanf("%s",s); int n=strlen(s); build(1,n,1); while(m--) { int a,b; scanf("%d%d",&a,&b); printf("%d\n",query(a,b,1,n,1)); } } return 0;}
阅读全文
1 0
- HDU5685
- hdu5685
- HDU5685(Problem A)
- HDU5685 Problem A 线段树
- HDU5685 乘法逆元应用
- hdu5685(乘法逆元)
- HDU5685 (费马小定理,逆元)
- 度熊的哈希 hdu5685
- 2016"百度之星" - 资格赛(Astar Round1)(hdu5685(线段树、乘法逆元),hdu5686(大数),hdu5687(字典树),hdu5688)
- C语言实验——整除
- Mysql事物四种隔离级别
- WPF应用程序内嵌网页
- 不用ajax,采用隐藏iframe实现表单异步提交
- ZYNQ GPIO应用
- hdu5685
- 2016 ACM-ICPC 亚洲区域赛北京站E题 What a Ridiculous Election (BFS预处理)
- Angular Material Menu 组件
- JAVA类加载和反射介绍
- HDU 4465 Candy 纯数学
- 图片缩放库--PhotoView的基本使用
- [JavaScript][AJAX][JQuery]利用回调接口封装AJAX类|原生JavaScript的AJAX写法优化
- 关于html二三事
- 【Linux环境配置】安装JDK