zoukankan      html  css  js  c++  java
  • F

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

    H(s)=ilen(s)i=1(Si28) (mod 9973)
    SiSi代表 S[i] 字符的 ASCII 码。 

    请帮助度熊计算大字符串中任意一段的哈希值是多少。

    Input多组测试数据,每组测试数据第一行是一个正整数NN,代表询问的次数,第二行一个字符串,代表题目中的大字符串,接下来NN行,每行包含两个正整数aa和bb,代表询问的起始位置以及终止位置。 

    1N1,0001≤N≤1,000 

    1len(string)100,0001≤len(string)≤100,000 

    1a,blen(string)1≤a,b≤len(string) 
    Output对于每一个询问,输出一个整数值,代表大字符串从 aa位到 bb 位的子串的哈希值。Sample Input

    2
    ACMlove2015
    1 11
    8 10
    1
    testMessage
    1 1

    Sample Output

    6891
    9240
    88
    原题:HDU - 5685 
    解题思路:线段树问题,第一次做不知道连乘的符号;
     1 #include <iostream>
     2 #include <string.h>
     3 #include <stdio.h>
     4 using namespace std;
     5 
     6 const int MAX = 1000000*10;
     7 int N;
     8 char a[MAX];
     9 int A[MAX];
    10 
    11 struct Seg
    12 {
    13     int veg;
    14 }seg[MAX];
    15 
    16 void CJ(int root,int istrct,int iend,int A[])
    17 {
    18     if(istrct == iend)
    19     {
    20         seg[root].veg = A[iend];
    21     }
    22     else
    23     {
    24         int mid = (istrct+iend)/2;
    25         CJ(root*2+1,istrct,mid,A);
    26         CJ(root*2+2,mid+1,iend,A);
    27         seg[root].veg = seg[root*2+1].veg*seg[root*2+2].veg%9973;
    28     }
    29 }
    30 
    31 int Cha(int root,int istrct,int iend ,int nstrct,int nend)
    32 {
    33     if(nstrct >iend||nend < istrct)
    34         return 1;
    35     if(nstrct <= istrct&&nend >=iend)
    36     {
    37         return seg[root].veg;
    38     }
    39 
    40     int mid = (istrct + iend)/2;
    41     return Cha(root*2+1,istrct,mid,nstrct,nend)*Cha(root*2+2,mid+1,iend,nstrct,nend)%9973;
    42 }
    43 
    44 int main()
    45 {
    46     while(cin>>N)
    47     {
    48         scanf("%s",a);
    49         int len = strlen(a);
    50         for(int i =1;i <=len;i++)
    51         {
    52             int temp = a[i-1] - 28;
    53             A[i] = temp;
    54         }
    55         CJ(0,1,len,A);
    56         int x,y;
    57         while(N--)
    58         {
    59             cin>>x>>y;
    60             cout<<Cha(0,1,len,x,y)<<endl;
    61         }
    62 
    63     }
    64 
    65     return 0;
    66 }



  • 相关阅读:
    用 ArcMap 发布 ArcGIS Server FeatureServer Feature Access 服务 PostgreSQL 版本
    ArcMap 发布 ArcGIS Server OGC(WMSServer,MapServer)服务
    ArcScene 创建三维模型数据
    ArcMap 导入自定义样式Symbols
    ArcMap 导入 CGCS2000 线段数据
    ArcMap 导入 CGCS2000 点坐标数据
    ArcGis Server manager 忘记用户名和密码
    The view or its master was not found or no view engine supports the searched locations
    python小记(3)操作文件
    pytest(2) pytest与unittest的区别
  • 原文地址:https://www.cnblogs.com/a2985812043/p/7375511.html
Copyright © 2011-2022 走看看