题目:Problem A

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5685

题意:对于一个字符串,定义一个哈希值 2016百度之星资格赛题解∏是连乘,给一个字符串s,现有n个操作,每次操作询问下标 l 到 r 之间的子串的哈希值,前缀的思想,先预处理出0到每一位的哈希值gi,现在只涉及到g[r]和g[l-1],不过因为涉及到取模操作,所以不能直接除,应该找g[l-1]的逆元e,答案便是g[r]*e%9973。

 1 #include<stdio.h>
 2 char s[100010];
 3 int a[100010];
 4 int exGcd(int a,int b,int &x,int &y)
 5 {
 6   if(b==0)
 7   {
 8     x=1;
 9     y=0;
10     return a;
11   }
12   int r=exGcd(b,a%b,x,y);
13   int t=x;
14   x=y;
15   y=t-a/b*y;
16   return r;
17 }
18 int main()
19 {
20   int n;
21   while(scanf("%d",&n)!=EOF)
22   {
23     scanf("%s",s+1);
24     a[0]=1;
25     for(int i=1;s[i];i++)
26     {
27       a[i]=a[i-1]*(s[i]-28)%9973;
28     }
29     int x,y;
30     while(n--)
31     {
32       scanf("%d%d",&x,&y);
33       int l,r;
34       exGcd(a[x-1],9973,l,r);
35       l=(l%9973+9973)%9973;
36       printf("%d\n",a[y]*l%9973);
37     }
38   }
39   return 0;
40 }
AC代码

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-11-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
  • 2021-09-04
  • 2022-01-20
  • 2022-12-23
  • 2021-08-03
相关资源
相似解决方案